2012-06-17 26 views
21

到目前爲止,我知道FileSystemWatcher可以查看文件夾,並且如果該文件夾中的任何文件發生更改,修改.etc ...,那麼我們可以處理它。 但我不知道我應該在我的場景中使用哪個過濾器和事件:注意文件夾,如果文件被添加到該文件夾​​,請執行XYZ ...所以在我的場景中,我不在乎現有文件是改變等..這些應該被忽略...只有當XYZ當且僅當一個新的文件已被添加到該文件夾​​...我需要使用FileSystemWatcher的哪個過濾器來查找新文件

你對這種情況推薦哪個事件和過濾器?

+3

什麼是投票?!?! – Bohn

回答

12

搭建觀察家:

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = "Blah"; 

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
    | NotifyFilters.FileName; 

watcher.Created += new FileSystemEventHandler(OnChanged); 

watcher.EnableRaisingEvents = true; 

然後實現FileCreated委託:

private void OnChanged(object source, FileSystemEventArgs e) { 
    Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); 
} 
+5

如果我們只關心正在創建的文件而沒有更改,爲什麼我們要設置'NotifyFilter'? –

+5

@JeffBridgman這並不直觀,但NotifyFilter可用作微調來自FileSystemWatcher的通知的一種方式。默認情況下,NotifyFilter設置爲DirectoryName | FileName | LastWrite。這些功能使您能夠從FileSystemWatcher獲取核心文件活動:創建,更改,刪除和重命名。通知過濾器可以改變,以增加文件/目錄屬性的頻譜,這些屬性將被監視並用作觸發各種事件的輸入。雖然,正如你可以猜測,大多數其他過濾器只會導致一個改變「事件。 – CobaltBlue

+11

Stackoverflow的答案最終比大多數其他網站,可以發現搜索谷歌搜索周圍,因爲答案獲得投票和隨着時間的推移更新。 –

3

請看看這裏的FileSystemWatcher對象的詳細解釋:http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

你將不得不尋找創建的文件,如果你想尋找添加的文件。

您可以通過設置WatcherChangeType枚舉的值來指定要監視的更改類型。可能的值如下:

  • 全部:創建,刪除,更改或重命名文件或文件夾。
  • 已更改:文件或文件夾的更改。更改類型包括:更改大小,屬性,安全設置,上次寫入以及上次訪問時間。
  • 創建:創建文件或文件夾。
  • 已刪除:刪除文件或文件夾。
  • 更名:重命名文件或文件夾。

而且你可能剛絲事件處理程序,如果一個文件被創建一個觸發(添加),並沒有實現所有的其他事件,因爲他們不感興趣的你:

watcher.Created += new FileSystemEventHandler(OnChanged); 
相關問題