我使用PDFCreator
和Process
start()
命令行创建文件。我等待一段时间使用WaitForExit()
其他我Kill
进程并再次使用WaitForExit()
。
执行这些步骤后,有时会创建输出文件,有时则不会。所以我检查File.Exist()
是否访问输出文件。
我面临的问题是,即使创建文件的过程被杀死或返回,有时这个文件也被另一个Process
使用(可能是PDFCreator
创建的其他一些进程或者Spooler
我不确定)
因此我Wait()
秒3
和poll
次x
次尝试,然后因故障而抛出异常。
我需要移动创建的文件,我需要检查文件是否存在,然后等到使用它的其他进程释放它或(可能找到哪个进程正在使用它并杀死它?)。如果文件没有退出,我可以继续处理失败案例。
如何去做?
我可能会尝试移动,然后如果另一个进程的例外正在使用它,那么我可以poll
和wait
。
但任何干净的方法?我不确定为什么即使在Process
被杀死或返回后文件仍在使用中。
答案 0 :(得分:0)
您的根本问题可能是您在创建过程中使用“kill”之前完成其任务。理想情况下,您应该在继续之前等待完成,否则您将遇到像现在这样的锁定。
这就是为了检查文件是否正在使用并且可以移动,您可以尝试使用从here获取的代码:
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}