【发布时间】:2009-04-06 14:30:59
【问题描述】:
当磁盘上的文件被修改时,是否有某种机制可以通知我(在 C# 中)?
【问题讨论】:
-
有关 FileSystemWatcher 类及其引发的事件的更多信息,请参阅answer。
标签: c# file filesystemwatcher
当磁盘上的文件被修改时,是否有某种机制可以通知我(在 C# 中)?
【问题讨论】:
标签: c# file filesystemwatcher
您可以使用@987654321@ 类。
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);
}
【讨论】:
watcher.IncludeSubdirectories = true; 来实现。
OnChange 在没有实际更改的情况下触发(例如:在没有任何实际更改的情况下点击ctrl+s),有没有办法检测到虚假更改?
FileSystemWatcher 只能检测文件系统级别的事件(即,如果操作系统触发事件)。在你的情况下 Ctrl+S 触发这样一个事件(是否发生取决于实际的应用程序)。
【讨论】:
使用FileSystemWatcher。您只能过滤修改事件。
【讨论】: