0

我编写了一个简单的 Windows 服务来监视文件夹并在到达的任何文件上运行 relog(用于从二进制 perf mon 文件导出数据的 Windows 工具)。

当我从我的 c# 进程(使用 System.Diagnostics.Process.Start())运行它时,我得到:

Error:
Unable to open the specified log file.

但是,如果我将命令复制并粘贴到控制台窗口中,它就可以正常工作。

我已经查看了整个网络,但一切似乎都指向一个损坏的文件,我知道情况并非如此,因为我可以在手动运行时完美导入。

非常感谢任何帮助。

4

1 回答 1

0

如果您使用 FileSystemWatcher 来监视文件,它将在文件完全写入磁盘之前触发 created 事件,这将导致重新记录有关无法“打开”文件的错误,因为它可能仍然被锁定并且在技术上就它而言,腐败。

我编写了以下帮助方法,我总是将其与 FileSystemWatcher 结合使用,以等待文件被完全写入并准备好在创建事件后进行处理,并且也会在超时后退出:

public static bool WaitForFileLock(string path, int timeInSeconds)
{
  bool fileReady = false;
  int num = 0;

  while (!fileReady)
  {
    if (!File.Exists(path))
    {
      return false;
    }

    try
    {
      using (File.OpenRead(path))
      {
        fileReady = true;
      }
    }
    catch (Exception)
    {          
      num++;
      if (num >= timeInSeconds)
      {
        fileReady = false;
      }
      else
      {
        Thread.Sleep(1000);
      }
    }
  }

  return fileReady;
}
于 2013-05-27T14:11:00.643 回答