파일 변경시 알림?


111

디스크에서 파일이 수정 될 때 알림 (C #)을받을 수있는 메커니즘이 있습니까?


1
FileSystemWatcher 클래스 및 발생하는 이벤트에 대한 자세한 내용 은이 답변 을 참조하십시오 .
ChrisF

답변:



204

FileSystemWatcher수업을 사용할 수 있습니다 .

public void CreateFileWatcher(string path)
{
    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = path;
    /* Watch for changes in LastAccess and LastWrite times, and 
       the renaming of files or directories. */
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
       | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    // Only watch text files.
    watcher.Filter = "*.txt";

    // Add event handlers.
    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.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
    // Specify what is done when a file is renamed.
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}

11
좋은 예에 감사드립니다. 또한 변경 사항을 감시하는 차단 (동기) 방법을 찾고 있다면 FileSystemWatcher에서 WaitForChanged 메서드를 사용할 수 있음을 지적합니다.
Mark Meuer 2013 년

22
이 예에 감사드립니다. MSDN은 여기에 거의 동일 합니다 . 또한 어떤 사람들은 전체 디렉토리 트리를보고 싶을 수도 있습니다 watcher.IncludeSubdirectories = true;.
Oliver

1
OnChange실제 변경없이 실행 ( 예 : ctrl+s실제 변경없이 타격 ), 가짜 변경을 감지 할 수있는 방법이 있습니까?
메디 Dehghani

1
@MehdiDehghani : 내가 아는 것은 아니지만, 유일한 방법은 실제로 파일의 스냅 샷을 유지하고 현재 (아마도 변경된) 버전과 바이트 단위로 비교하는 것 같습니다. 는 FileSystemWatcher전용 (즉 OS가 이벤트를 트리거하는 경우) 파일 시스템 레벨에서 이벤트를 감지 할 수있다. 귀하의 경우 Ctrl + S는 그러한 이벤트를 트리거합니다 (발생 여부는 실제 응용 프로그램에 따라 다름).
Dirk Vollmar

FileSystemWatcher는 크로스 플랫폼입니까?
Vinigas

5

를 사용합니다 FileSystemWatcher. 수정 이벤트에 대해서만 필터링 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.