【发布时间】:2010-11-27 23:35:04
【问题描述】:
我想检测特定文件夹上的每个文件更改(数据更改除外)。我决定使用 System.IO.FileSystemWatcher 来管理它。
//
// fileSysWatchFile
//
this.fileSysWatchFile.EnableRaisingEvents = true;
this.fileSysWatchFile.IncludeSubdirectories = true;
this.fileSysWatchFile.NotifyFilter = System.IO.NotifyFilters.FileName;
this.fileSysWatchFile.SynchronizingObject = this;
this.fileSysWatchFile.Created += new System.IO.FileSystemEventHandler(this.fileSysWatchFile_Created);
this.fileSysWatchFile.Deleted += new System.IO.FileSystemEventHandler(this.fileSysWatchFile_Deleted);
this.fileSysWatchFile.Renamed += new System.IO.RenamedEventHandler(this.fileSysWatchFile_Renamed);
最好...检测到新文件。检测到文件删除。检测到文件重命名。
当我将文件移动到子文件夹时,它首先检测到文件删除,然后检测到新文件创建。
我希望移动与重命名相同,但路径除外。似乎不是。我可以在保存方式中检测文件移动吗?
顺便说一句...我只想检测文件更改而不是目录更改。
编辑:
附加信息为什么我必须检测移动并且不能忍受删除,创建:
我想在另一个驱动器上重放相同的更改。如果我先删除,我会删除影子文件。然后我得到创建文件事件并且原始文件已经丢失:-(。
所以我有一个驱动器 A,它是被监视的驱动器... 还有一个驱动器 B,其中包含具有相同文件名的文件。
除数据更改外的所有文件更改都应在驱动器 B 上重放。
【问题讨论】:
-
主要问题是我不能说删除和创建事件之间的时间有多长。因此,我无法通过延迟路径检查检测它来实现保存解决方法。
-
对于文件移动来说,任何超过几秒钟的时间都是一个非常令人惊讶的值,因为 Windows 实际上只是更新文件路径,即使它说它是删除 + 创建
-
AFAIK FileSystemWatcher 是一种尽力而为的方法。通知缓冲区有限,当缓冲区已满时,通知将被静默删除。因此,当系统繁忙时,您的应用可能会错过一些事件。
-
我不认为缺少什么,因为我得到了删除和创建事件。
标签: c# move filesystemwatcher