2009-04-06 5 views
78

Есть ли какой-то механизм, с помощью которого я могу быть уведомлен (в C#), когда файл изменен на диске?Уведомление при изменении файла?

+1

3 ответа одновременно. –

+1

См. Этот [ответ] (http://stackoverflow.com/questions/381976/handling-multiple-change-events-in-filesystemwatcher/382996#382996) для получения дополнительной информации о классе FileSystemWatcher и событиях, которые он вызывает. – ChrisF

ответ

5

Используйте FileSystemWatcher. Вы можете фильтровать только события модификации.

139

Вы можете использовать класс 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); 
} 
+7

Спасибо за хороший пример. Я также укажу, что вы можете использовать метод WaitForChanged в FileSystemWatcher, если вы ищете блокирующий (синхронный) способ наблюдения за изменениями. –

+13

Спасибо за этот пример. MSDN имеет почти то же самое [здесь] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter%28v=vs.100%29.aspx). Кроме того, некоторые люди могут захотеть просмотреть целые каталоги дерева - для этого используйте 'watcher.IncludeSubdirectories = true; '. – Oliver

Смежные вопросы