我已经编写了一个简单的Windows服务来查看文件夹并运行relog(用于从二进制perf文件导出数据的windows工具)到达的任何文件。
当我从我的c#进程运行它时(使用System.Diagnostics.Process.Start())我得到:
Error:
Unable to open the specified log file.
但是,如果我将命令复制并粘贴到控制台窗口中,它可以正常工作。
我看过网络,但是一切似乎都指向一个损坏的文件,我知道情况并非如此,因为我可以在手动运行时完美导入。
非常感谢任何帮助。
答案 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;
}