首页 > 解决方案 > FileSystemWatcher 不通知删除路径目录本身

问题描述

我在我的代码中使用 FileSystemWatcher 来跟踪受监视目录下文件的任何更改/重命名/添加。现在,如果受监视的目录本身被删除,我需要通知。

关于如何实现这一目标的任何建议?

我试图在父目录上添加第二个观察者(C:\temp\subfolder1在下面的示例中)并将事件过滤到受监控目录的完整路径(C:\temp\subfolder1\subfolder2)。

但是,如果删除是在更高的目录级别完成的,并且我不想监视整个文件系统,这将不起作用。在下面的示例中,它也应该在删除时触发C:\temp ,而不仅仅是在删除时触发C:\temp\subfolder1

  class Program
  {
    static void Main(string[] args)
    {
      FileSystemWatcher watcher = new FileSystemWatcher();
      watcher.Path = @"C:\temp\subfolder1\subfolder2";
      watcher.EnableRaisingEvents = true;

      watcher.Changed += OnChanged;
      watcher.Created += OnChanged;
      watcher.Deleted += OnChanged;
      watcher.Renamed += OnChanged;

      Console.ReadLine();
    }

    private static void OnChanged(object sender, FileSystemEventArgs e)
    {
      Console.WriteLine(e.FullPath);
    }
  }

标签: c#.netfilesystemwatcher

解决方案


您可以订阅FileSystemWatcher.Error事件。这将在父目录被删除时触发。然后您可以进行适当的检查以查看这是否是由文件夹删除引起的。


推荐阅读