首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为多个文件类型的FileSystemWatcher设置过滤器?

如何为多个文件类型的FileSystemWatcher设置过滤器?
EN

Stack Overflow用户
提问于 2011-08-06 14:22:08
回答 4查看 54.6K关注 0票数 67

在提供的示例中,我到处都可以找到这两行代码,用于设置文件系统监视器的筛选器。

代码语言:javascript
运行
复制
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Filter = "*.txt";
//or
watcher.Filter = "*.*";

但我希望我的监视器监视更多的文件类型,但不是全部。我如何实现这一点:

代码语言:javascript
运行
复制
//watcher.Filter = "*.txt" | "*.doc" | "*.docx" | "*.xls" | "*.xlsx";

我尝试了这些:

代码语言:javascript
运行
复制
 watcher.Filter = "*.txt|*.doc|*.docx|*.xls|*.xlsx"; 
 // and
 watcher.Filter = "*.txt;*.doc;*.docx;*.xls;*.xlsx*";

这两种方法都不起作用。这只是基础知识,但我怀念它。谢谢..

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-11 01:51:05

从.Net Core3.x和.Net 5预览版开始,您可以简单地向Filters集合添加多个筛选器。

代码语言:javascript
运行
复制
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;

或者,如果您喜欢对象初始化器,

代码语言:javascript
运行
复制
var watcher = new FileSystemWatcher
    {
        Path = "/your/path",
        Filters = {"*.yml", "*.yaml"},
        NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName,
        EnableRaisingEvents = true,
    };
票数 13
EN

Stack Overflow用户

发布于 2011-08-06 14:34:24

有一种解决方法。

我们的想法是观察所有扩展,然后在OnChange事件中过滤出所需的扩展:

代码语言:javascript
运行
复制
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."); 
    } 
} 
票数 56
EN

Stack Overflow用户

发布于 2015-12-02 19:28:24

快速查看一下反射器就会发现,在windows api报告文件系统更改之后,过滤是在.Net代码中完成的。

因此,我建议注册多个监视器的方法是低效的,因为您会将更多的负载放在API上,从而导致多个回调,并且只有一个过滤器会匹配。只注册一个观察者并自己过滤结果要好得多。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6965184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档