2016-12-22 80 views
4

當受監視目錄中的文件的ReadOnly屬性發生更改時,FileSystemMonitor看起來沒有觸發'Changed'事件(並且沒有其他事件)。FileSystemWatcher - 更改只讀屬性的事件

這是我的測試代碼:

using System; 
    using System.IO; 

    namespace FSM 
    { 
     class Program 
     { 
      static FileSystemWatcher FolderMonitor; 


      static void Main(string[] args) 
      { 
      FolderMonitor = new FileSystemWatcher("C:\\MyImages"); 
      FolderMonitor.IncludeSubdirectories = false; 
      FolderMonitor.Changed += FolderMonitor_Changed; ; 
      FolderMonitor.EnableRaisingEvents = true; 

      Console.WriteLine("Hit any key to terminate ....."); 
      Console.ReadKey(true); 
     } 


     private static void FolderMonitor_Changed(object sender, FileSystemEventArgs e) 
     { 
      Console.WriteLine("**** \"" + e.Name + "\" changed."); 
     } 
    } 

與該代碼,我收到了很多「改變」的事件,例如中如果修改時間戳發生了變化,但如果我正在更改任何標準屬性(如ReadOnly或Hidden),則不能修改。

我錯過了什麼,或者我打了一個「功能」?

+0

似乎很奇怪。文檔說:「更改事件是在更改大小,**系統屬性**,上次寫入時間,上次訪問時間或正在監視的目錄中的文件或目錄的安全權限時引發的。」_ – stuartd

回答

4

您需要設置NotifyFilter屬性,因爲這會確定要監視的更改的類型。參見FileSystemWatcher.NotifyFilter Property

例如

FolderMonitor.NotifyFilter = NotifyFilters.Attributes; 
+1

是的,的確,我錯過了設置NotifyFilter屬性。我已將以下行添加到我的代碼中: FolderMonitor.NotifyFilter = NotifyFilters.Attributes \t \t \t \t | NotifyFilters.DirectoryName | NotifyFilters.FileName \t \t \t \t | NotifyFilters.LastWrite | NotifyFilters.Security; 它現在完美了! 我的問題是Changed事件似乎對我有用 - 但只是因爲NotifyFilter的默認設置不足以滿足我的任務。 謝謝! – PaulTheHacker