在提供的示例中,我到处都可以找到这两行代码,用于设置文件系统监视器的筛选器。
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Filter = "*.txt";
//or
watcher.Filter = "*.*";
但我希望我的监视器监视更多的文件类型,但不是全部。我如何实现这一点:
//watcher.Filter = "*.txt" | "*.doc" | "*.docx" | "*.xls" | "*.xlsx";
我尝试了这些:
watcher.Filter = "*.txt|*.doc|*.docx|*.xls|*.xlsx";
// and
watcher.Filter = "*.txt;*.doc;*.docx;*.xls;*.xlsx*";
这两种方法都不起作用。这只是基础知识,但我怀念它。谢谢..
发布于 2020-04-11 01:51:05
从.Net Core3.x和.Net 5预览版开始,您可以简单地向Filters
集合添加多个筛选器。
var watcher = new FileSystemWatcher();
watcher.Path = "/your/path";
watcher.Filters.Add("*.yml");
watcher.Filters.Add("*.yaml");
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.EnableRaisingEvents = true;
或者,如果您喜欢对象初始化器,
var watcher = new FileSystemWatcher
{
Path = "/your/path",
Filters = {"*.yml", "*.yaml"},
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName,
EnableRaisingEvents = true,
};
发布于 2011-08-06 14:34:24
有一种解决方法。
我们的想法是观察所有扩展,然后在OnChange事件中过滤出所需的扩展:
FileSystemWatcher objWatcher = new FileSystemWatcher();
objWatcher.Filter = "*.*";
objWatcher.Changed += new FileSystemEventHandler(OnChanged);
private static void OnChanged(object source, FileSystemEventArgs e)
{
// get the file's extension
string strFileExt = getFileExt(e.FullPath);
// filter file types
if (Regex.IsMatch(strFileExt, @"\.txt)|\.doc", RegexOptions.IgnoreCase))
{
Console.WriteLine("watched file type changed.");
}
}
发布于 2015-12-02 19:28:24
快速查看一下反射器就会发现,在windows api报告文件系统更改之后,过滤是在.Net代码中完成的。
因此,我建议注册多个监视器的方法是低效的,因为您会将更多的负载放在API上,从而导致多个回调,并且只有一个过滤器会匹配。只注册一个观察者并自己过滤结果要好得多。
https://stackoverflow.com/questions/6965184
复制相似问题