我正在编写C#并使用FileSystemWatcher来监视文件夹目录(可以创建和重命名文件夹)。我成功处理了Created和Renamed事件。
这些文件夹的内容可以不断变化。但我需要认识到的唯一变化是将新的HTML文件添加到文件夹中。
如何过滤除新[HTML]文件以外的所有更改事件?
答案 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)))
{ ... }
}