避免多个 FileSystemWatcher

Avoid multiple FileSystemWatcher

我目前正在开发一个允许用户定义多个根目录的自定义资源管理器。为了捕获系统中的所有更改,我对所有指定的根目录使用 FileSystemWatcher

现在,当然,用户可能会定义两个包含相同路径的根目录。例如,C:\WindowsC:\Windows\System32\en-US

然后,当这些路径中的文件被修改时(例如C:\Windows\System32\en-US\Licenses),相应的事件处理程序会被执行两次。

那么有没有一种方法可以使用观察到的路径来比较 FileSystemWatcher 并排除所有重复项?

我已经考虑过将单个 FileSystemWatcher 分配给所有路径,因此不监视子路径。但我认为这不是那么高效。

仅供参考:

foreach (string rootPath in Settings.RootPaths)
{
    FileSystemWatcher watcher = new FileSystemWatcher(rootPath);

    watcher.SynchronizingObject = this.treeView;
    watcher.NotifyFilter = NotifyFilters.Attributes
                            | NotifyFilters.CreationTime
                            | NotifyFilters.DirectoryName
                            | NotifyFilters.FileName
                            | NotifyFilters.LastAccess
                            | NotifyFilters.LastWrite
                            | NotifyFilters.Security
                            | NotifyFilters.Size;
    watcher.IncludeSubdirectories = true;
    watcher.EnableRaisingEvents = true;

    watcher.Created += ElementCreatedEventHandler;
    watcher.Deleted += ElementDeletedEventHandler;
    watcher.Renamed += ElementRenamedEventHandler;
}

提前致谢。

假设您的意思是 FileSystemWatcher,那就是:FileSystemWatcher.Filter。 class 维护一个过滤器集合,您可以通过 属性 FileSystemWatcher.Filters

您必须检查 rootpath1 是否是另一个 rootpath2 的子目录,在这种情况下您只需要 rootpath2 上的 FileSystemWatcher。

要检查是子目录你可以看看

How to check if directory 1 is a subdirectory of dir2 and vice versa