我有一个应用程序,我正在寻找一个文本文件,如果对该文件进行了任何更改,我正在使用OnChanged
事件处理程序来处理事件。我正在使用NotifyFilters.LastWriteTime
但该事件仍然被解雇两次。这是代码。
public void Initialize()
{
FileSystemWatcher _fileWatcher = new FileSystemWatcher();
_fileWatcher.Path = "C:\\Folder";
_fileWatcher.NotifyFilter = NotifyFilters.LastWrite;
_fileWatcher.Filter = "Version.txt";
_fileWatcher.Changed += new FileSystemEventHandler(OnChanged);
_fileWatcher.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
.......
}
就我而言OnChanged
当我更改文本文件时被调用两次version.txt
并保存它。
恐怕这是一个众所周知的错误/功能FileSystemWatcher
班级。这是来自该类的文档:
您可能会注意到,在某些情况下,单个创建事件会生成多个由组件处理的 Created 事件。例如,如果使用 FileSystemWatcher 组件监视目录中新文件的创建,然后使用记事本创建文件来测试它,则即使只创建了一个文件,您也可能会看到生成了两个 Created 事件。这是因为记事本在写入过程中执行多个文件系统操作。记事本批量写入磁盘,创建文件内容,然后创建文件属性。其他应用程序可以以相同的方式执行。由于 FileSystemWatcher 监视操作系统活动,因此将拾取这些应用程序触发的所有事件。
现在这段文字是关于Created
事件,但同样的事情也适用于其他文件事件。在某些应用程序中,您可能可以通过使用NotifyFilter
属性,但我的经验表明,有时您还必须进行一些手动重复过滤(黑客)。
不久前,我在一个页面上添加了一些书签文件系统观察器提示。您可能想检查一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)