2014-10-19 81 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