2011-08-19 67 views
1

我有兩個應用程序,CREATOR(我不能修改)和OBSERVER。 CREATOR操縱許多文件,我需要OBSERVER來知道這是什麼時候發生的。我用C#編寫了OBSERVER,並使用了FileSystemWatcher。我將路徑設置爲我的路徑,將篩選器設置爲FILE並添加所有必需的事件。但是,當CREATOR修改文件時,OBSERVER中不會引發任何事件。奇怪的是,當我手工修改文件時,OBSERVER 確實看到了更改。我認爲CREATOR可能不會釋放該文件,但是當我關閉CREATOR時,OBSERVER仍然看不到更改。問題fileSystemWatcher

任何想法我做錯了什麼?

額外的詳細信息: 當CREATOR修改文件,我可以手工刪除它,或者當我打開文件,我看到所有的更改都保存。

編輯

我FileSystemWatcher的對象設置:

fileSystemWatcherObs.EnableRaisingEvents = true; 
fileSystemWatcherObs.Filter = "kbd.dbf"; 
fileSystemWatcherObs.IncludeSubdirectories = true; 
fileSystemWatcherObs.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Attributes | 
    NotifyFilters.CreationTime | NotifyFilters.DirectoryName |NotifyFilters.LastAccess | NotifyFilters.Security | 
    NotifyFilters.Size; 
fileSystemWatcherObs.Path = "D:\\FOLDER"; 
fileSystemWatcherObs.SynchronizingObject = this; 
fileSystemWatcherObs.Changed += new System.IO.FileSystemEventHandler( this.fileSystemWatcherObs_Changed); 
fileSystemWatcherObs.Created += new System.IO.FileSystemEventHandler(this.fileSystemWatcherObs_Created); 
fileSystemWatcherObs.Deleted += new System.IO.FileSystemEventHandler(this.fileSystemWatcherObs_Deleted); 
fileSystemWatcherObs.Renamed += new System.IO.RenamedEventHandler(this.fileSystemWatcherObs_Renamed); 

,當然方法爲這個事件

+0

請閱讀此:http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – Oded

+0

因此,你有一個應用程序修改文件,而你用filesystemwatcher編寫和應用程序來檢查這些修改,但它沒有注意到你的「創建者」應用程序何時修改它們?請發佈您的「觀察員」應用程序的相關代碼。 – Aerik

+0

是的,確切地說。我不知道我在做什麼錯誤 – nirmus

回答

0

這裏有一些提示,也許可以幫助你:

  1. 一點也沒有」無論你做出更改by hand還是其他應用程序「你創建者」,si當你手工製作它們時,你實際上使用了一些應用程序,如「notepad.exe」或其他東西,所以這並不重要。
  2. 您應該設置EnableRaisingEvent爲真「開始觀看」之後您設置了路徑並註冊了事件處理程序,因此在設置觀察程序的所有配置之後它應該是最後一件事情。
  3. 在您的NotifyFilter正在設置整個通知過濾器,這將導致您有時收到重複通知。
  4. 既然你只想看一個特定的文件夾,那麼你不必包含子文件夾,即fIncludeSubdirectories應該是錯誤的。
  5. 爲什麼你要設置SynchronizingObjectthis?一個更好的如果你不得不是要把它帶到new object()
+0

當我通過鼠標單擊設置某個屬性時,此設置由visual studio生成。你的提示很有幫助,但我知道。使用提示更改後不起作用。 – nirmus

+0

無關緊要,您設置了多標誌,可以使您接收重複的通知,如:NotifyFilters.LastWrite和NotifyFilters.Attributes將接收重複通知當文件發生變化時,一個用於最後寫入,另一個用於屬性... –