具有文件名关键字的FileSystemWatcher特定文件过滤器

问题描述:

我正在使用下面的代码来使用FileSystemWatcher类来监视本地系统上的文件。我想要做的只是观察那些在关键字中指定的文件名(可能是逗号分隔的字符串或txt文件)。 请指导我在正确的方向。具有文件名关键字的FileSystemWatcher特定文件过滤器

FileSystemWatcher objWatcher = new FileSystemWatcher(); 
    objWatcher.Filter = "*.*"; 
    objWatcher.Changed += new FileSystemEventHandler(OnChanged); 

    private static void OnChanged(object source, FileSystemEventArgs e) 
    { 
    string strFileExt = getFileExt(e.FullPath); 
    } 

感谢&问候

+0

看看_Filter_支持正则表达式模式。 – sln

+2

看看这个http://*.com/questions/6965184/how-to-set-filter-for-filesystemwatcher-for-multiple-file-types –

尽管FileSystemWatcher不支持该功能,但您可以通过在引发事件后过滤文件名来获得该功能。您将无法使用过滤器,如“”但对于例如,如果您想让所有的XML和TXT文件,你可以做{名为“.xml”,“.TXT”}

FileSystemWatcher objWatcher = new FileSystemWatcher(); 
objWatcher.Changed += new FileSystemEventHandler(OnChanged); 

string[] filters = new string[] { "test", "blah", ".exe"}; //this needs to be a member of the class so it can be accessed from the Changed event 

private static void OnChanged(object source, FileSystemEventArgs e) 
{ 
    if (filters.Any(e.FullPath).Contains)) 
    {  
     string strFileExt = getFileExt(e.FullPath); 
    } 
} 

这应该给你一个你如何做的基本想法。

+0

谢谢大家,我希望有一个选项可以标记不止一个作为答案。 – Robin

FileSystemWatcher组件提供了一个PathFilter属性来确定你想要观看的文件。您可以在Filter属性中使用通配符来观看多个文件,但除此之外,没有任何内置功能可以同时观看任意一组文件。从Filter property documentation:不支持使用多个过滤器,如“.txt | .doc”。

您可能需要做的是为列表中的每个项目创建一个不同的FileSystemWatcher