2009-05-08 1 views
0

로컬 컴퓨터의 FTP 폴더에서 파일을 가져 와서 해당 파일의 데이터를 구문 분석하고 외부 소스로 푸시해야하는 Windows 서비스를 작성하고 있습니다. 파일은 다른 상대방의 어떤 시점에서 FTP 폴더에 업로드되며 파일을 업로드 할시기를 예측할 수 없습니다. FTP 폴더를 검사하고 파일이 최근에 서버에 업로드 된시기를 인식하고 파싱 프로세스를 시작할 수 있도록 서비스가 필요합니다.최근에 파일이 FTP 폴더에서 덮어 쓴 것을 어떻게 알 수 있습니까?

파일이 디렉토리에 저장되었을 때이를 감지 할 수있는 .NET의 방법이 있는지 알아야합니다.

이와 비슷한 질문이 here에 관한 것이지만 Windows 서비스 작성과 관련이 없습니다. 또한이 솔루션은 디렉토리 자체를 모니터링하는 것처럼 보였지만 DirectoryInfo 클래스를 사용하여 아이디어를 테스트했으며 LastWriteTime 속성을 살펴볼 때 작동하지 않습니다. 디렉토리의 파일을 복사하고 바꿀 때 디렉토리의 시간은 변경되지 않습니다.

참고 : 상대방이 이러한 파일을 어떻게 생성하는지 모르기 때문에 파일의 생성/수정 타임 스탬프에 의존 할 수 없습니다.

답변

3

FileSystemWatcher를 사용하십시오. 그것은 당신이 처리 할 수있는 "변경된"(또는 "창조 된"나는 믿는다) 이벤트를 던질 것입니다. 파일 작업을 시작하기 전에 파일이 완전히 작성되었는지주의해야하지만 올바른 방향으로 가리켜 야합니다.

편집 : (! FileComplete (foo는)), 여기에 내가 바로 그런 경우 내 유틸리티 클래스에 보관 정적 메소드의 방법에 대한 요셉의 질문에

 
public static bool FileComplete(string filePath) 
     { 
      try 
      { 
       File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
       return true; 
      } 
      catch { return false; } 
     } 

그럼 난 그냥 동안 {} 전에 내 실제 파일 처리.

+0

감사합니다. AllenG,하지만 파일을 완전히 작성했는지 어떻게 알 수 있습니까? FileInfo 클래스에서 그 정보를 수집합니까? – Joseph

+0

내가하는 일은 FileSharing.None으로 파일을 열어 ftp 트랜잭션이 여전히 파일에 쓰려고 시도하는지 확인하는 것입니다. 그런 식으로 열 수있게되면 좋을 것입니다. 더 좋은 방법이있을 수 있지만, 그렇다면 나는 그것을 모른다. – AllenG

관련 문제