2014-10-19 113 views
0

我的文件觀察器事件只讀取第一個文件,然後出現以下錯誤: 「錯誤:System.IO.IOException:進程無法訪問文件'D:\ TREE \ Dump \ TF20141004011343313.txt '因爲它正在被另一個進程使用。「文件觀察器錯誤

這裏是我的代碼:

int? msgID; 
     string dup =""; 
     try 
     { 
      //---------read from file------------ 

      string block; 

      using (StreamReader sr = File.OpenText(MsgsPath + "\\" + e.Name)) 
      { 
       block = sr.ReadToEnd(); 
      } 

和「使用」應當辦理自動開啓和關閉,對不對? 然後我用這個代碼移動處理的文件:

 File.Move(MsgsPath + "\\" + e.Name, MsgsPath + "\\Archive\\" + e.Name); 
+0

這完全正常。當您收到FSW事件時,正在更新文件的程序仍在積極使用它。幾乎總是需要等待文件完成。你無法預測需要多長時間。將文件路徑放入列表中,使用計時器定期嘗試打開文件。 – 2014-10-19 10:55:31

回答

-1

FileSystemWatcherCreated事件一旦其他進程打開的文件寫入而引發的。在此之後,當其他進程寫入文件時,將會出現一個或多個Changed事件,並最終關閉它。

避開錯誤的最簡單的方法,將試圖訪問該文件之前等待一小會兒:

Thread.Sleep(500); 

更先進的方法,是等待從最後不一會Changed事件。

+0

爲什麼downvote?答案似乎是正確的? – Ondra 2014-10-19 11:08:36

+0

我手動刪除文件,但沒有收到錯誤信息,我將等待實時消息流,並將其標記爲已解決。非常感謝 – 2014-10-19 11:55:09

+0

嘗試編寫一個小應用程序或腳本來打開文件,等待一段時間,寫入並關閉它。它應該可以幫助你調試。 – 2014-10-19 15:26:48