2012-10-04 47 views
2

如果這是一個重複的問題,我將開始道歉。有大量的FileSystemWatcher問題,但我沒有看到任何解決我的問題。FileSystemWatcher提高多個事件

好吧,所以我在C#中有一個控制檯應用程序,它監視一個目錄,我們將其稱爲RootRoot有許多子文件夾。如果在Root或其任何子文件夾中創建,修改或刪除任何.csv文件,則此應用程序的目的是寫入日誌文件。我目前有這種工作很好,有點。唯一的問題是創建一個.csv文件時,修改或刪除它實際上提出了對所有3

例如事件,如果我創建Root一個名爲test.csv,日誌文件應該是這樣的:

10/04/2012: File F:/Root/test.csv Created 
10/04/2012: File F:/Root/test.csv Changed 
10/04/2012: File F:/Root/test.csv Created 
10/04/2012: File F:/Root/test.csv Deleted 

我不知道怎麼回事,所以這裏是樹立FileSystemWatcher

_watchFolder.Path = ConfigurationManager.AppSettings["RootToWatch"]; 
_watchFolder.Filter = ConfigurationManager.AppSettings["FileNameToWatch"]; 
_watchFolder.NotifyFilter = NotifyFilters.FileName 
          | NotifyFilters.LastWrite; 
_watchFolder.IncludeSubdirectories = true; 
_watchFolder.Changed += new FileSystemEventHandler(OnChanged); 
_watchFolder.Created += new FileSystemEventHandler(OnChanged); 
_watchFolder.Deleted += new FileSystemEventHandler(OnChanged); 
_watchFolder.Renamed += new RenamedEventHandler(OnRenamed); 

try 
{ 
    _watchFolder.EnableRaisingEvents = true; 
} 
catch (ArgumentException ex) 
{ 
    AbortMonitoring(ex.Message); 
} 

這裏的代碼是我的事件調用onChanged(改名是相同的,但有不同的說法)

protected static void OnChanged(object sender, FileSystemEventArgs e) 
    { 
     //compile message to insert into log file. 
     string message = "File: " + e.FullPath + " " + e.ChangeType; 
     UpdateLogFile(message); 
    } 
+0

得到所有三個建議我創建它們的代碼正在做一個重命名。重命名會給你一個刪除,然後創建一個,然後寫入它。 –

回答

0

只需爲changed事件添加處理程序。它應該收集所有變化類型。其他類型的事件如created在那裏,如果您希望僅在特定更改類型中引發該事件。

watchFolder.IncludeSubdirectories = true; 
_watchFolder.Changed += new FileSystemEventHandler(OnChanged); 
+0

其實,我只是試過這個,只有'.Changed'事件我沒有得到任何事件。甚至沒有「文件更改」事件。 –