我使用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)
}
}