过滤FileSystemWatcher更改了事件

时间:2011-11-22 19:42:47

标签: c# .net filesystemwatcher

我正在编写C#并使用FileSystemWatcher来监视文件夹目录(可以创建和重命名文件夹)。我成功处理了Created和Renamed事件。

这些文件夹的内容可以不断变化。但我需要认识到的唯一变化是将新的HTML文件添加到文件夹中。

如何过滤除新[HTML]文件以外的所有更改事件?

3 个答案:

答案 0 :(得分:1)

您可以在构造函数中为要监视的文件类型指定通配符:

var folder = @"c:\";    
FileSystemWatcher watcher = newFileSystemWatcher(folder, "*.html");

然后,如果您只想在创建这些文件时收到通知:

watcher.Created += new FileSystemEventHandler(watcher_FileCreated);

void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
// do something interesting
}

答案 1 :(得分:0)

FileSystemEventArgs包含一个名为Name的属性,可帮助您过滤。

http://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs.aspx

快速样本:

static void Main(string[] args)
{
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\";
        watcher.EnableRaisingEvents = true;
        watcher.Created += new FileSystemEventHandler((o,s) => {
        if (s.Name.ToLower().EndsWith(".html") || s.Name.ToLower().EndsWith(".htm"))
             Console.WriteLine("HTML is here");
        });

        Console.ReadLine();
 }

请注意,您可以将“* .html”传递给构造函数,但是您不会捕获以.htm文件结尾的文件,这些文件被认为是有效的。但我不确定这是否符合您的使用案例。

答案 2 :(得分:0)

只需订阅Change事件并使用现有FSW进行适当过滤。如果你可以创建另一个FSW,那么Paul Kearney的答案就足够了,而且可能更清晰。

string[] desiredExtensions = new [] { ".html", ... };
string desiredExtension = ".html";


watcher.Changed += watcher_Changed;

...

private void watcher_Changed(object sender, FileSystemEventArgs e)
{
   // single
   if (string.Equals(Path.GetExtension(e.FullPath), desiredExtension, StringComparison.CurrentCultureIgnoreCase))
   { ... }

   // several
   if (desiredExtensions.Any(ext => string.Equals(Path.GetExtension(e.FullPath), ext, StringComparison.CurrentCultureIgnoreCase)))
   { ... }
}