避免多个FileSystemWatcher

问题描述 投票:0回答:2

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

FileSystemWatcher

现在,当然,用户可能会定义两个包含相同路径的根目录。例如,

C:\Windows
C:\Windows\System32\en-US

然后,当修改这些路径中的文件时(例如

C:\Windows\System32\en-US\Licenses
),相应的事件处理程序将执行两次。

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

我已经考虑过为所有路径分配一个

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;
}

提前致谢。

c# path filesystemwatcher file-watcher
2个回答
2
投票

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

要检查是否是子目录,您可以查看

如何检查目录1是否是dir2的子目录,反之亦然


-1
投票

假设你的意思是

FileSystemWatcher
,有这个:FileSystemWatcher.Filter。 该类维护一个过滤器集合,您可以通过属性获取该集合
FileSystemWatcher.Filters

© www.soinside.com 2019 - 2024. All rights reserved.