2012-10-05 3 views
0

원본 파일이 잠긴 상태에서 파일을 잠그고 복사하고 사본을 수정하고 원본 파일로 다시 저장하는 방법에 대한 도움이 필요합니다. 여기 잠긴 파일/스트림으로 복사/이동

는 현재의 흐름입니다 : 사용자가 파일, 임시 폴더에 응용 프로그램 복사본을 열고는 다시 임시 파일을 저장할 때

_lockStream = new FileStream(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read); 

다음 줄에 원본 파일을 잠급니다 원본 파일에, 현재 나는 다음과 같은 루틴 (대상 = _lockStream 및 소스 = 임시 파일의 스트림) 사용하고 있습니다 :

public static void Copy(Stream source, Stream destination, int bufferSize) 
    { 
     int readed = 0; 

     byte[] buffer = new byte[bufferSize]; 

     destination.SetLength(source.Length); 
     destination.Position = 0; 

     while ((readed = source.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      destination.Write(buffer, 0, readed); 
     } 
     destination.Flush(); 
    } 

내가 대신 File.Copy를 사용하는 것을 선호를,하지만 난 방법을 모르는 잠긴 fi로 작동하도록하십시오. 파일을 응용 프로그램이 잠근 경우에도 그리고 더 나쁜 것은 내 방법이 안전하지 않기 때문에 응용 프로그램이나 시스템이 중간에 충돌하면 원본 파일이 손상된 것입니다. 더 정확한 접근 방식은 같은 폴더에 복사 한 다음 이동 (또는 단순히 이동)하는 것이지만 원본 파일에 잠금을 유지하는 방법을 모르겠다 고 생각합니다.

그럼 안전하게하기 위해 파일 잠금을 해제하고 File.Copy를 사용한 다음 다시 잠금을 얻으십시오. 작동하지만 몇 밀리 초 동안 파일 잠금이 해제되어 다른 프로세스에서 잠글 수 있습니다.

그런 일을하는 가장 좋은 방법은 무엇입니까? 위해

답변

0

는 다음과 같이하여 TransactionScope를 사용할 수있는 방법은 안전 만들려면 :이 작동하지 않습니다

using(var scope = new TransactionScope()) 
{    
    Copy(source, destination, buffersize); 
    scope.Complete(); 
} 
+0

. 디버거의 복사 방법에서 멈추고 나가면 대상 스트림이 부분적으로 덮어 씁니다. – xll