我正在编写C#并使用FileSystemWatcher监视文件夹的目录(可以创建和重命名文件夹)。我正在成功处理创建和重命名的事件。Filter FileSystemWatcher已更改事件
这些文件夹的内容可以不断更改。但是唯一需要认识到的变化是当新的HTML文件被添加到文件夹中时。
如何过滤除新的[HTML]文件以外的所有更改事件?
我正在编写C#并使用FileSystemWatcher监视文件夹的目录(可以创建和重命名文件夹)。我正在成功处理创建和重命名的事件。Filter FileSystemWatcher已更改事件
这些文件夹的内容可以不断更改。但是唯一需要认识到的变化是当新的HTML文件被添加到文件夹中时。
如何过滤除新的[HTML]文件以外的所有更改事件?
您可以指定在构造一个通配符的文件类型,以观察:
var folder = @"c:\";
FileSystemWatcher watcher = newFileSystemWatcher(folder, "*.html");
然后,如果你只希望当这些文件被创建通知:
watcher.Created += new FileSystemEventHandler(watcher_FileCreated);
void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
// do something interesting
}
FileSystemEventArgs
包含一个名为Name
的属性,它可以帮助您过滤。
http://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs.aspx
快速样品:
需要注意的是,你可以在“*。html的”传递给构造函数,但你不会捕捉.htm文件结尾的文件,这被认为是有效。但我不确定这是否符合您的使用案例。
只需订阅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)))
{ ... }
}
非常好,两个FSW,一个用于创建和重命名事件,另一个用于新的HTML文件更改事件。谢谢! – llg
感谢您的回复,但是我正在'看'文件夹可以被创建和重命名的目录。这是可以更改的文件夹的内容(即添加另一个HTML文件)。我的更改事件处理程序正在捕获文件夹中发生的每个更改。我只想抓住新的[html]文件。 – llg
您是否在构造函数中指定了一个过滤器(上例中的* .html)?如果是这样,它应该只在发生与通配符匹配的更改时触发。 –
如果我使用* .html作为过滤器,我是否仍然能够捕获创建和重命名的事件?以下是我的代码: – llg