我目前正在开发一个自定义资源管理器,它允许用户定义多个根目录。为了捕获系统中的所有更改,我对所有指定的根目录使用
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;
}
提前致谢。
您必须检查 rootpath1 是否是另一个 rootpath2 的子目录,在这种情况下,您只需要 rootpath2 上的 FileSystemWatcher 。
要检查是否是子目录,您可以查看
假设你的意思是
FileSystemWatcher
,有这个:FileSystemWatcher.Filter。 该类维护一个过滤器集合,您可以通过属性获取该集合 FileSystemWatcher.Filters