如果从C#执行,Relog无法打开二进制日志文件

时间:2013-05-27 13:33:43

标签: c# perfmon

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

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

Error:
Unable to open the specified log file.

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

我编写了以下帮助器方法,我总是与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;
}