我正在編寫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