2014-04-04 56 views
1

我在Windows服務中安裝了以下FileSystemWatcher。即使IncludeSubdirectories設置爲false,FileSystemWatcher也會獲取子目錄事件

FileSystemWatcher Watcher = new FileSystemWatcher(); 
    Watcher.Path = watcherDir; 
    Watcher.NotifyFilter = NotifyFilters.LastWrite; 
    Watcher.Renamed += Watcher_Renamed; 
    Watcher.Changed += Watcher_Changed; 
    Watcher.Error += Watcher_Error; 
    Watcher.Filter = "*.*"; 
    Watcher.IncludeSubdirectories = false; 
    Watcher.EnableRaisingEvents = true; 

我看到一些不一致的行爲 - 它也監聽子目錄中的更改。我已經登錄查看它發現它有點奇怪。
我正在看C:\ Temp \ Folder1,而其他一些進程在C:\ Temp \ Folder1 \ Folder2中創建一個日誌文件。此FileSystemWatcher對象正在挑選此信息 -
1. e.FullPath給出子目錄的名稱,在這種情況下爲C:\ Temp \ Folder1 \ Folder2
2. Path.GetDirectoryName(e.FullPath)爲我提供目錄我正在觀看,即C:\ Temp \ Folder1。
3.擴展名爲空,這就是我忽略這一點,這是我忽略這種情況。

任何建議,我怎麼能找出這裏發生了什麼?

回答

2

在內創建或刪除文件目錄也被計爲對該目錄本身的更改。這是正在向您報告的事件。 Folder2本身位於您正在監控的目錄中。

報告的路徑是目錄的路徑,而不是其中的文件,並且您會注意到它的Changed處理程序被調用,儘管文件系統操作實際上是創建或刪除。

在您的事件處理程序中,您可以檢查報告的路徑是否爲a directory,而只是return並且在事件處理程序中不執行進一步處理(如果是這種情況)。

+0

是的,我已經檢查過,但不應該Watcher.IncludeSubdirectories = false;防止這種情況發生? – Kodathon

+0

@Kodathon - no。將目錄看作只是包含文件列表的特殊文件,以及在文件系統上的何處找到它們。當從目錄添加或刪除文件時,該特殊文件本身正在改變。這是一個特殊的文件,位於「Folder1」目錄中,您正在監控的那個目錄中,您正在接收事件。 * * Folder2中的文件*發生更改時,*不*接收事件。只是當文件被添加或從目錄中刪除。 –

+0

如果該屬性處理它,則會首選。無論如何,將與此額外檢查去驗證路徑。謝謝 ! – Kodathon

相關問題