【问题标题】:FileSystemWatcher - Windows Explorer->UndoFileSystemWatcher - Windows 资源管理器 -> 撤消
【发布时间】:2013-10-04 03:57:10
【问题描述】:

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

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

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

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

有什么建议吗?

【问题讨论】:

    标签: c# filesystemwatcher undo windows-explorer


    【解决方案1】:

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

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多