2017-03-16 15 views
1

我正在使用C#中的FileSystemWatcher構造。作爲課程的標準,我讓我的觀察者僅僅關注感興趣的目錄。我遇到的問題是,無論用戶事件(複製,創建,重命名),我正在拾取的唯一事件是Changed事件。C#:FileSystemWatcher僅派發ChangedEvent

例如。

  1. 觀看文件 「C:\桌面\ MattsRequest」

  2. 創建文件 「C:\桌面\ MattsRequest \ Dummy.txt」

  3. 觀察,只有給onChanged處理與「改變」一個FileSystemEventArg和路徑ARG引發的是「C:\桌面\ MattsRequest」 並沒有提到什麼文件被創建

我的監視器代碼看起來像這樣。

  watcher = new FileSystemWatcher(); 
      //watcher.IncludeSubdirectories = true; 
      watcher.InternalBufferSize = 32768 * 2; 
      //Can't use a synchro because I can't find an example of something that 
      //implements ISynchroniz-whatever 
      //watcher.SynchronizingObject = 

      watcher.Path = filePath; 

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

      watcher.Changed += OnChanged; //Gets triggered 
      watcher.Created += OnCreated; //Never triggered 
      watcher.Deleted += OnDeleted; 
      watcher.Renamed += OnRenamed; //Never triggered 
      watcher.Error += WatcherOnError; //Never triggered 

      // Begin watching. 
      watcher.EnableRaisingEvents = true; 

下面是當我創建的監控目錄的新文件的圖像,並且它觸發關閉事件。它的類型當然是Changed,但它並不告訴我創建了哪個文件。

enter image description here

任何幫助是極大的讚賞。

+2

最有可能你看頂級目錄。例如,您觀看「Desktop \ MattsRequest」,但您在子目錄「Desktop \ MattsRequest \ MattsRequest \ Dummy.txt」中創建文件。 – Evk

+0

如果你想跟蹤子目錄中的變化 - 設置'watcher.IncludeSubdirectories = true;' – Evk

+0

@Evk Hello Evk。你是完全正確的問題是什麼。你介意讓你的評論成爲迴應,所以我可以給它一個綠色支票? –

回答

2

當您觀看目錄並在該目錄的子目錄內創建文件時,可能會發生這種情況。這是因爲在目錄中創建文件會更改該目錄的時間戳,這就是您看到的事件(更改目錄)。

要修復 - 要麼監視子目錄本身,要麼設置watcher.IncludeSubdirectories = true;以包含子目錄。

0

Evk的回答是正確的。我只是在看祖父母文件夾,並且該文件夾發射了一個缺少信息的事件。一旦我將監視器添加到父文件夾中,創建和其他事件就會正確啓動。

+1

標記他的答案是正確的? –