进程终止后文件仍然打开

时间:2014-05-30 06:41:48

标签: c# file-io process

我的代码,删除了一些非必要的位,看起来像:

using (Process p = new Process()()
{
    p.StartInfo.FileName = batfile;
    p.StartInfo.Arguments = @"""" + filename + @"""";
    p.Start();
    if (!p.WaitForExit(timeout))
    {
        p.Kill();
        if (!p.WaitForExit(timeout))
        {
            return failure;
        }
    }
}
File.Delete(filename);

return success;

因此,我创建了一个执行.bat文件的进程,向.bat文件传递一个文件名进行处理,然后启动进程,等待它终止,然后删除它刚刚处理的文件。通常情况下,这很好用。

有时候,.bat文件中的内容会挂起,我必须终止恢复过程。当发生这种情况时,File.Delete()会抛出异常"该进程无法访问文件' filename'因为它正被另一个进程使用"。

想想也许我只需要稍等一下我在File.Delete()之前放一个Thread.Sleep()几秒钟 - 我已经将睡眠时间增加到30秒并且我仍然看到了例外。当一个过程死亡后,打开的手柄当然不会徘徊很久吗?

如何修复或解决此问题?

0 个答案:

没有答案