1

我正在开发一个应用程序,其中我使用 FileSystemWatcher 使用 NotifyFilters.FileName 和 NotifyFilters.DirectoryName 过滤器来监视文件/目录创建/删除事件。我还将 IncludeSubdirectories 设置为 true

使用这个,如果我在 Windows 资源管理器中复制一个文件夹,我会获得该新文件夹的每个子项以及新文件夹本身的创建事件。但是,如果我在 Windows 资源管理器中删除一个文件夹(包含子项),然后在 Windows 资源管理器中“撤消”该操作,我只会获得该文件夹的创建事件,而不是任何子项。

我不能简单地做一个 Directory.GetFiles() 因为子项目可能不存在,我不能只是将它分派到以后,因为取决于文件的数量/大小,撤消操作可能需要很长一段时间才能完成,我不知道要延迟多长时间。

我注意到,如果我还听 NotifyFilters.Attributes 标志,那么我确实会为撤消操作的每个子项获得一个 ResourceChanged 事件,但是在许多其他情况下会引发 ResourceChanged 事件,我真的寻找一个确定的创作事件。

有什么建议么?

4

1 回答 1

0

如果您在资源管理器中删除文件,该文件将移至回收站。如果文件是从回收站恢复的,您可以通过将观察程序添加到回收站来检测它。找到回收站的路径有点棘手,但这段代码可以完成工作:

WindowsIdentity currentUser = WindowsIdentity.GetCurrent();
string path = string.Format(@"C:\$Recycle.Bin\{0}", currentUser.User.Value);
FileSystemWatcher w = new FileSystemWatcher(path, "*.*");
w.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Attributes | NotifyFilters.Size;
w.IncludeSubdirectories = true;
w.Changed += watcher_Changed;
w.Created += watcher_Created;
w.Renamed += watcher_Renamed;
w.Deleted += watcher_Deleted;
w.EnableRaisingEvents = true;
于 2013-10-14T15:31:20.357 回答