我有一个应用程序,我们通过将更改写入单独的文件,然后删除原始文件并重命名新文件,为我们的应用程序替换“artproj”文件。它通常运行良好,但有时,它会被“卡住”删除,无处可去,在调试时无法在Visual Studio中中止调用。查看Process Explorer,看起来我的应用程序在此时具有文件句柄,但 explorer.exe 也是如此。实际上,当我退出应用程序时, explorer.exe 上仍然有三个具有相同进程ID的句柄。我只能猜测这就是为什么使用FileInfo.Delete的删除不会通过。
这是删除程序:
private static Exception InternalSafeKill(FileInfo TargetFile)
{
try
{
TargetFile.Attributes = FileAttributes.Normal;
TargetFile.Delete();
return null;
}
catch (Exception ex)
{
return ex;
}
}
有没有办法避免这种冲突?在通话前检测它?在检测到时以某种方式安全地逃脱它?