检测到当前正在写入文件

本文关键字:文件 检测 | 更新日期: 2023-09-27 17:58:52

(我知道这是一个常见的问题,但我找不到确切的答案)

我需要编写一个windows服务来监视一个目录,并在文件到达时打开它,解析文本,对它做一些操作,然后将它移动到另一个目录。我使用了本文中提到的IsFileLocked方法来了解文件是否仍在编写中。我的问题是,我不知道另一方需要多少时间才能完成对文件的写入。我可以等几秒钟再打开文件,但这不是一个完美的解决方案,因为我不知道文件的写入速度,几秒钟可能不够。

这是我的代码:

while (true)
  {
    var d = new DirectoryInfo(path);
    var files = d.GetFiles("*.txt").OrderBy(f => f);
    foreach (var file in files)
    {
      if (!IsFileLocked(file))
      {
        //process file
      }
      else
      {
        //???
      }
    }
  }

检测到当前正在写入文件

我认为您可能会使用FileSystemWatcher(有关它的详细信息,请点击此处:http://msdn.microsoft.com/it-it/library/system.io.filesystemwatcher(v=vs.110).aspx)。

具体来说,您可以挂接到OnChanged事件,在它引发之后,您可以检查IsFileLocked以验证它是否仍在写入中。

此策略应避免您在轮询过程中主动等待。