2014-12-03 7 views
0

여기 상황이 있습니다. 마지막으로 수정 한 시간을 기반으로 파일을 읽고 싶습니다. 처음에는 FileSystemWatcher를 사용하여 새 파일이 도착할 때 알림을 받았지만 나중에 소프트웨어가 실행중인 시스템이 다운되거나 파일이 삭제되는 위치가 다시 시작되면 계속 진행됩니다. C에서 수정 된 시간을 기준으로 파일 읽기

보다 쉽게 ​​이해 내가 예를 줄 것이다 만들려면 :

시스템 A - 내 소프트웨어가 실행 파일을 모니터 - 파일 서버 시스템 B를 (파일이 서버의 디렉토리에있는 모든 2 분을 생성) 시스템 A의 경로에서

시스템 B가 다시 시작되고 10 분 후에 다시 가동되면 FileSystemWatcher는 10 분 내에 생성 된 모든 파일을 건너 뜁니다.

어떻게 10 분 내에 생성 된 파일도 캡처 할 수 있습니까?

내 질문이 아직 이해할 수없는 경우 알려주십시오.

+0

나는 방법이 없다고 생각합니다. 한 가지 방법은 시스템을 다시 시작할 때 파일을 다시 읽는 것입니다 ... –

답변

0

두 시스템에서 분리하지 않으려면 약간의 정보를 유지해야합니다. 파일 시스템 감시자에서 새 이벤트가 발생할 때마다 파일에 현재 시간 소인을 저장할 수 있습니다. 서비스가 시작될 때마다 마지막 타임 스탬프보다 새로운 모든 파일을 파일 시스템에서 읽을 수 있습니다. 이렇게하면 파일을 놓치지 않아야합니다. 조건에 따라 대상에 붙여

+0

이것은 정확히 제가 생각한 것입니다. 하지만 샘플 코드로 도울 수 있습니까? – gauravmajithia

0

이 응용 프로그램을 두 부분으로 나누고이 10 분 동안 작성된 파일을 버퍼링하고 파일 시스템을 재시작 할 때 시스템 b로 전송하는 filesystemwatcher-wcf 서비스를 실행합니다. 나는 다른 길은 볼 수 없다. 미안하다.

0

복사 전체 소스 머신에서 파일과 ..

문자열 dirPath = @ "C : \ A"; string DestinPath = @ "C : \ B";

 if (Directory.Exists(dirPath) && Directory.Exists(DestinPath)) 
     { 
      DirectoryInfo di = new DirectoryInfo(dirPath); 

      foreach (var file in di.GetFiles()) 
      { 
       string destinFile = DestinPath + "\\" + file.Name; 
       if (File.Exists(destinFile)) 
       { 
        continue; 
       } 
       else 
        file.CopyTo(destinFile); 
      } 

     } 
0

FileSystemWatcher는 파일 시스템 정보를 DB (또는 다른 유형의 저장 장치)에 써야한다고 생각합니다. 시스템 B가 시작될 때 watcher는 현재 파일 시스템을이 정보와 비교하여 변경 사항에 대한 이벤트를 발생시킵니다.

+0

이것은 정확히 내가 생각하고있는 것입니다. 하지만 샘플 코드로 도울 수 있습니까? – gauravmajithia

0

질문을 올바르게 이해했는지 알 수 있지만, 예를 들어 10 분 이내에 수정 된 파일을 얻으려는 경우, 두 시스템이 시간을 기준으로 동기화되었다고 가정 할 때 :

 DateTime tenMinutesAgo = DateTime.Now.AddMinutes(-10); 
     string[] systemAFiles = System.IO.Directory.GetFiles(systemAPath); 
     foreach (string files in systemAFiles) 
     { 
      DateTime lastWriteTime = System.IO.File.GetLastWriteTime(files); 
      if (lastWriteTime > tenMinutesAgo) //produced after ten minutes ago 
      { 
       //read file 
      } 
     } 

이 파일들은 생성되거나 수정되었으므로 "생성"된 것으로 알고 있습니다. 그들이 단순히 한 폴더에서 다른 폴더로 이동 한 경우에는 작동하지 않습니다. 이 경우 가장 좋은 방법은 해당 목록에있는 파일의 스냅 샷을 작성하고이를 일종의 저장 파일에 쓰고 다시 실행될 때 비교하는 것입니다.

+0

예. 어떤 것이 될 수 있습니다 이와 비슷합니다. @Marc 및 Vitone의 아이디어와 함께이 코드를 구현할 수 있습니다. 시도해보고 다시 답장을 보내십시오. – gauravmajithia