进程退出后删除正在使用的文件时出现异常



我使用ImageMagick(https://imagemagick.org)转换命令,将图像从一种格式转换为另一种格式。我有CommandExecutor类,

public static class CommandExecutor
{
public static bool Execute(string cmd)
{
var batchFilePath = Path.Combine(AppSettings.BaseToolsPath, $"{Guid.NewGuid().ToString()}.bat");
try
{
File.WriteAllText(batchFilePath, cmd);
var process = new Process();
var startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = batchFilePath;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit(10000);
return true;
}
finally
{
if (File.Exists(batchFilePath))
{
File.Delete(batchFilePath);
}
}
} 
}

我正在动态创建输入图像,然后convert.exe将创建一个输出图像。

File.WriteAllBytes(inputImagePath, image);
CommandExecutor.Execute(command);
if (File.Exists(inputImagePath))
{
File.Delete(inputImagePath);
}
if (File.Exists(outputImagePath))
{
File.Delete(outputImagePath);
}

在我的生产中,我看到太多的文件在使用异常。使用后如何清洗文件?

你可以依靠IOException

while (File.Exists(path))
{
try
{
File.Delete(path);
}
catch (IOException ex)
{
}
}

如果bat文件是可管理的,批处理文件可以删除自己(点击这里)。所以File.Exists会再次检查。

,您可以使用进程'Exited事件,

var process = Process.Start(processInfo);
process.EnableRaisingEvents = true;
process.Exited += Process_Exited;
private void Process_Exited(object sender, EventArgs e)
{
if (File.Exists(path)) { // if still exists
File.Delete(path)
}
}

相关内容

  • 没有找到相关文章

最新更新