나는 사이드 카 파일을 통해 메타 데이터를 카탈로그 파일로 저장하는 애플리케이션을 작성하고있다. 사용자가 (복사, 이름 바꾸기, 이동, 삭제 등 ..) 조작 할 수 있도록 파일 IO 작업을 추가하려고합니다. 내 응용 프로그램을 통해 사이드카 파일을 조작합니다.여러 파일 IO 작업이 성공적으로 수행되도록하려면 어떻게합니까?
그러나 한 가지 IO 작업이 하나의 파일에는 완료되지만 다른 파일에는 완료되지 않으므로 파일이 일관성없는 상태로 남을 수 있습니다. 그래서 I/O 작업의 전부 또는 전부를 보장 할 수있는 방법을 찾고 싶습니다.
먼저 IO 작업을 성공적으로 수행 할 수있는 방법이 있습니까? 물론 File.Exists
테스트를 할 수 있습니다. 그러나 파일의 접근 가능성과 같은 다른 잠재적 인 문제가 있습니다. 읽기 전용 상태이거나 다른 사용자가 잠근 경우 문제가 더 복잡해집니다. 모든 가능한 문제에 대한 테스트를 끝내더라도 테스트와 실제 IO 작업 사이의 시간에 파일이 변경 될 가능성은 거의 없지만 가능성이 있습니다. 파일이 File.Exists(somefile.txt)
과 File.Copy(somefile.txt,somefile2.txt)
사이에서 삭제되었다고 가정 해보십시오.
또는 파일 IO 작업을 나타내는 클래스 집합을 만들려고했지만 작업을 수행 한 후에 실행 취소 옵션도 사용할 수 있습니다. 이 방법은 내 프로그램이 여러 IO 작업을 시도 할 수 있지만 한 작업이 실패 할 경우 나중에 모든 변경 사항을 쉽게 되돌릴 수 있어야합니다. 아래 인터페이스를 참조하십시오.
이것은 더 나은 옵션처럼 보이지만 다른 의견을 듣고 싶습니다.
public enum IOActionStatus {Not Run, Successful, Failed}
public interface
{
public bool Go();
public void Undo();
public IOActionStatus Status;
}
public class CopyFileAction:IOAction
{
public Copy File Action(string sourcepath, string destPath)
{
}
public bool Go()
{
//attempts to to copy file
}
public void Undo()
{
//deletes the copied file if Go() was successful
}
public IOActionStatus Status{get; private set;}
}