我想检测特定文件夹上的每个文件更改(数据更改除外).我决定使用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,其文件具有相同的文件名.
所有文件更改exept数据更改应在驱动器B上重播.
最佳答案 文件删除/文件创建功能是文件移动的背后.如果您只是将文件从文件夹移动到文件夹,它类似于重命名,但是如果将文件从一个磁盘移动到另一个磁盘,或者在机器之间移动文件呢?
并且,如果我正在观看指定的文件夹,只要该文件不存在,它也可能已被删除:)
如果您确定要捕获文件移动的“事件”(从监视文件夹到监视的子文件夹),我会维护一个最近删除的文件列表,并在每个文件创建事件时,检查该文件是否是该列表,表示事实上的文件移动.