2011-11-22 81 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