避免多个 FileSystemWatcher
Avoid multiple FileSystemWatcher
我目前正在开发一个允许用户定义多个根目录的自定义资源管理器。为了捕获系统中的所有更改,我对所有指定的根目录使用 FileSystemWatcher
。
现在,当然,用户可能会定义两个包含相同路径的根目录。例如,C:\Windows
和 C:\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
我目前正在开发一个允许用户定义多个根目录的自定义资源管理器。为了捕获系统中的所有更改,我对所有指定的根目录使用 FileSystemWatcher
。
现在,当然,用户可能会定义两个包含相同路径的根目录。例如,C:\Windows
和 C:\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