如果在c#中执行Relog,则无法打开二进制日志文件

本文关键字:二进制 文件 日志 执行 Relog 如果 | 更新日期: 2023-09-27 18:15:45

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

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

Error:
Unable to open the specified log file.

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

我在网上看了很多,但似乎都指向一个损坏的文件,我知道不是这样的,因为我可以在手动运行时完美地导入。

感谢您的帮助。

如果在c#中执行Relog,则无法打开二进制日志文件

如果您正在使用FileSystemWatcher来监视文件,它将在文件完全写入磁盘之前触发创建的事件,这将导致relog中关于无法"打开"文件的错误,因为它可能仍然被锁定并且技术上损坏。

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