2010-07-09 8 views
2

나는 사이드 카 파일을 통해 메타 데이터를 카탈로그 파일로 저장하는 애플리케이션을 작성하고있다. 사용자가 (복사, 이름 바꾸기, 이동, 삭제 등 ..) 조작 할 수 있도록 파일 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;} 
} 

답변

2

Windows Vista 이상에서는 파일 시스템 트랜잭션이 존재합니다 (NTFS 전용, FAT 지원 없음).

직접 관리 API가 없습니다 (andyp가 p/Invoke를 사용하여 참조하는 우수 article). Windows API 코드 팩에 추가하도록 요청했습니다. 당신은 here 요청을 upvote 수 있습니다.

1

이 MSDN 매거진 article는 제안이 윈도우 비스타 (위쪽) 지원 파일 시스템 거래, 심지어 관리 API 사용할 수있을 것이다. HTH.

관련 문제