2015-02-03 3 views
-1

최근에 FileSystemWatcher으로 작업하기 시작했습니다. 특정 디렉토리를 모니터해야한다는 요구 사항이 있으며 그 디렉토리에 추가 된 새 파일은 MD5 체크섬을 가져 와서 콘솔에 표시합니다. 그래서 적절한 이벤트 핸들러FileSystemWatcher - 만든 파일을 읽을 수 없습니다.

watcher.Created += new FileSystemEventHandler(OnCreated);

을 추가 한 다음 첫 번째 파일은 그러나 곧 다른 파일이 만들어집니다로 작성 될 때 완벽하게 잘 작동

private static void OnCreated(object sender, FileSystemEventArgs e) 
    { 
     using (var md5 = MD5.Create()) 
     { 
      using (var stream = File.OpenRead("C:\\Test\\Uploads\\"+ e.Name)) 
      { 
       byte[] checkSum = md5.ComputeHash(stream); 

       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < checkSum.Length; i++) 
       { 
        sb.Append(checkSum[i].ToString()); 
       } 

       Console.WriteLine(sb.ToString()); 
      } 
     } 
    } 

처럼 OnCreated 보인다 디렉토리 다음 오류가 발생합니다.

추가 정보 : 프로세스가 'C : \ Test \ Uploads \ New Text Document (2) .txt'파일에 액세스 할 수 없습니다. b ecause가 다른 프로세스에 의해 사용되는

오류를 던지고 선은

using (var stream = File.OpenRead("C:\\Test\\Uploads\\"+ e.Name)) 

입니다 또한 stream.Dispose();을 시도했지만 같은 문제가했습니다. 아무도 내가 잘못 가고 있는지 알 수 있습니까? 모든 도움과 지원에 미리 감사드립니다.

+3

아마 * 다른 프로세스에서 사용 중일 수 있습니다 - 아마도 파일이 작성/작성되지 않았습니까? – Plutonix

+0

e.Name은 항상 새로 생성 된 파일의 이름을 포함합니까? – silent

+0

@silent 네, 항상 새로 만든 파일의 이름이 – Code

답변

2

상술 한 바와 같이, 캐치 블록에 제대로 특정 오류를 확인해야한다는 시도로

 using (var md5 = MD5.Create()) 
     { 
      int retries = 10; 
      while (retries > 0) 
      { 
       try 
       { 
        using (var stream = File.OpenRead("C:\\Test\\Uploads\\" + e.Name)) 
        { 
         byte[] checkSum = md5.ComputeHash(stream); 

         StringBuilder sb = new StringBuilder(); 
         for (int i = 0; i < checkSum.Length; i++) 
         { 
          sb.Append(checkSum[i].ToString()); 
         } 
        } 
        // All done, leave the loop 
        break; 
       } 
       catch (FileNotFoundException e) 
       { 
        // Check for your specific exception here 
        retries--; 
        Thread.Sleep(1000); 
       } 
      } 
      // Do some error handling if retries is 0 here 
     } 

참고이 간단한 시간을보십시오. 다른 경우에는 예외를 처리하려고합니다.

+0

단순히 'FileNotFoundException'을 잡기 만하는 것이 어떻습니까? – pascx64

+0

아아 네 : 확실 해요 ... thx – silent

+0

@silent 코드가 내게 똑같은 오류를 줄 것 같습니다 :/ – Code

관련 문제