2011-11-22 82 views
0

我正在编写C#并使用FileSystemWatcher监视文件夹的目录(可以创建和重命名文件夹)。我正在成功处理创建和重命名的事件。Filter FileSystemWatcher已更改事件

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

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

回答

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 
} 
+0

感谢您的回复,但是我正在'看'文件夹可以被创建和重命名的目录。这是可以更改的文件夹的内容(即添加另一个HTML文件)。我的更改事件处理程序正在捕获文件夹中发生的每个更改。我只想抓住新的[html]文件。 – llg

+0

您是否在构造函数中指定了一个过滤器(上例中的* .html)?如果是这样,它应该只在发生与通配符匹配的更改时触发。 –

+0

如果我使用* .html作为过滤器,我是否仍然能够捕获创建和重命名的事件?以下是我的代码: – llg

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))) 
    { ... } 
} 
+0

非常好,两个FSW,一个用于创建和重命名事件,另一个用于新的HTML文件更改事件。谢谢! – llg