2008-09-21 3 views
6

변경 및 추가를 위해 지정된 디렉터리를 모니터링하고 데이터베이스에 정보를 저장하는 C# 응용 프로그램을 빌드하고 있습니다.디렉터리 수정 모니터링

개별 파일의 수정 여부를 확인하고 싶지 않지만 파일 액세스 시간을 완전히 신뢰할 수 있는지 확실하지 않습니다.

디렉토리에서 최근 수정 된 파일을 가져 오는 데 가장 좋은 방법은 무엇입니까?

사용자가 요청할 때만 수정 여부를 확인하므로 지속적으로 실행되는 서비스가 아닙니다.

+0

항상 실행중인 서비스가 있습니까? 아니면 지속적으로 파일 시스템을 모니터링하지 않고도 프로그램이 최근에 수정 된 파일을 검색 할 때마다 검색 하시겠습니까? 제발, 그 질문을 분명히해라. –

답변

1

음 ... 재미있는 질문. 처음에 나는 FileSystemWatcher 클래스에서 가르쳐 주겠다. 그러나 사용자 요청에 따라이 작업을 수행하려는 경우 처음에는 디렉토리 정보를 저장 한 다음 사용자가 요청할 때마다 비교해야 할 수도 있습니다. 나는 아마 FileSystemWatcher와 함께 가고 결과를 어쨌든 저장한다.

6

FileSystemWatcher 개체를 사용하십시오. 당신이 찾고있는 것을하기위한 코드가 있습니다.

 
    // Declares the FileSystemWatcher object 
    FileSystemWatcher watcher = new FileSystemWatcher(); 

    // We have to specify the path which has to monitor 

    watcher.Path = @"\\somefilepath";  

    // This property specifies which are the events to be monitored 
    watcher.NotifyFilter = NotifyFilters.LastAccess | 
     NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; 
    watcher.Filter = "*.*"; // Only watch text files. 

    // Add event handlers for specific change events... 

    watcher.Changed += new FileSystemEventHandler(OnChanged); 
    watcher.Created += new FileSystemEventHandler(OnChanged); 
    watcher.Deleted += new FileSystemEventHandler(OnChanged); 
    watcher.Renamed += new RenamedEventHandler(OnRenamed); 
    // Begin watching. 
    watcher.EnableRaisingEvents = true; 


    // Define the event handlers. 
    private static void OnChanged(object source, FileSystemEventArgs e) 
    { 
    // Specify what is done when a file is changed, created, or deleted. 
    } 

    private static void OnRenamed(object source, RenamedEventArgs e) 
    { 
    // Specify what is done when a file is renamed. 
    } 
1

사용자가 항상 묻는 시간을 확인하기 만하면 FileSystemWatcher를 사용하지 마십시오. 특히 공유 리소스 인 경우 마지막으로 50 대의 클라이언트 컴퓨터가 동일한 공유 디렉터리를보고 있습니다.

아마도 오타 일 뿐이지 만 파일 액세스 시간을 보지 말고 파일 수정 시간을 확인하여 변경 사항을 가져오고 싶을 것입니다. 그것은 신뢰할 수 없습니다.

내가 할 일은 파일 날짜 및 바이트 크기 또는 기타 파일 시스템 속성에 일종의 체크섬 기능을 구현하는 것입니다. 그렇게하면 전체 파일의 변경 사항을 찾지 않아도됩니다. 원격 리소스에 대한 연결을 유지하려고 시도하는 대신 요청에 따라 속성을 변경할 수 있습니다.

무거운 해결책은 파일을 모니터링하고 변경 사항을 기록 할 수있는 공유 드라이브를 호스팅하는 컴퓨터에 서비스를 설치하는 것입니다. 그렇다면 파일을 전혀 건드리지 않고 서비스를 쿼리 할 수 ​​있습니다.하지만 과장 될 수 있습니다.