【发布时间】:2018-07-10 01:25:36
【问题描述】:
我对 C# 的 FileSystemWatcher 有一些疑问。
这是我的代码如下。
private void MyFileSystemWatcher()
{
_watch = new FileSystemWatcher(path);
_watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Size;
_watch.Filter = "*.*";
_watch.IncludeSubdirectories = true;
_watch.Changed += new FileSystemEventHandler(_watch_Changed);
_watch.Created += new FileSystemEventHandler(_watch_Created);
_watch.EnableRaisingEvents = true;
}
private void _watch_Changed(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File changed: {0}", e.Name);
}
private void _watch_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
}
当我将 book.txt 放到目录中时,这是我的结果。
File created: book.txt
File changed: book.txt
但这不是我预期的结果。我希望它只是触发创建的事件。
File created: book.txt
如何改进我的代码。我无法删除更改的事件,我使用了另一种情况。
【问题讨论】:
-
旁注:由于文件操作的实现方式,有时您确实会收到意想不到的通知序列...在正确监听文件更改后,您应该尝试其他操作 - 保存,以不同方式复制,复制粘贴/拖放并确保您明智地处理所有情况。
-
您是在移动文件还是创建副本?在任何情况下,请注意文件属性可能会因移动或复制文件而更新,因此会发生“更改”事件。
FileSystemWatcher只是在做你要求它做的事情。如果您不想对特定的更改事件做出反应,那就不要。你到底在这里遇到了什么麻烦?不清楚你在问什么。 -
我需要 changed 事件来监控文件内容是否被修改。而且我需要创建的事件来监控新文件,而不是触发更改的事件。
标签: c# .net filesystemwatcher