如果在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.
但是,如果我复制并粘贴命令到控制台窗口,它会正常工作。
我在网上看了很多,但似乎都指向一个损坏的文件,我知道不是这样的,因为我可以在手动运行时完美地导入。
感谢您的帮助。
如果您正在使用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;
}