如何以编程方式删除文件?
以下是我用来关闭应用程序及其关联进程的代码,并删除在使用应用程序期间已提取的所有文件:
private void Quit_Click(object sender, RoutedEventArgs e) //close the application
{
//kill cinector after all import is done
Process[] processes = Process.GetProcesses();
for (int i = 0; i < processes.Count(); i++)
{
if (processes[i].ProcessName.ToLower().Contains("CinectorProcess"))
{
processes[i].Kill();
}
}
//also kill powerpoint just in case
for (int i = 0; i < processes.Count(); i++)
{
if (processes[i].ProcessName.ToLower().Contains("powerpnt"))
{
processes[i].Kill();
}
}
//kill the engine
ShutdownEngine();
//kill the main app
App.Current.Shutdown();
//also delete all three folders
//slides_png_prev
if (Directory.Exists(slides_png_prev))
{
Thumbnails = null;
Directory.Delete(slides_png_prev, true);
}
//slides_png
if (Directory.Exists(slides_png))
{
Directory.Delete(slides_png, true);
}
//slides_png_prev_seleect
if (Directory.Exists(slides_png_prev_seleect))
{
Directory.Delete(slides_png_prev_seleect, true);
}
}
但是,问题是,当它试图删除文件(这是应用程序中某处使用的图像)时,它显示以下异常:
“进程无法访问该文件,因为它正在被另一个进程使用。”
更新:我发现进程'Mastersolution.vhost.exe'正在保存我试图删除的所有文件。 Mastersolution实际上是我在App.Current.Shutdown();
上关闭的主要应用程序App.Current.Shutdown();
所以我需要以某种方式断开主应用程序中的文件,然后再删除它们。 但锄头要做到这一点?
将文件存储在临时目录中并让操作系统处理它。
请参阅Path.GetTempPath和Path.GetTempFileName。
首先,您应该确定文件夹中的哪个文件被锁定 - 而不是删除整个文件夹,删除单个文件。 然后使用Process Explorer和Ctrl + F查看哪个进程真正使用了不可删除的文件。
您也可以在此代码中使用WhoIsLocking
方法。
https://bitbucket.org/snippets/wiip/nnGX
您可以使用它来确定哪个进程锁定文件。 然后你可以写这样的东西来自动杀死这个过程:
List<Process> lp = FileUtil.WhoIsLocking(fileName);
foreach (Process p in lp)
{
p.Kill();
}
当没有更好的选项时,这是最后的解决方法,例如关闭应用中的文件,使用自动化等关闭Powerpoint。
您可以在没有问题的情况下删除文件夹,只要这些文件夹未被使用,并且您有权这样做。 您可以使用SysInternals Handle来确定哪些进程正在访问您想要的文件/文件夹。 请注意,如果您无法删除这些文件,并且访问这些文件不是您的流程,只需提出警告:“无法清理文件夹:幻灯片预览”,而不是随机杀死用户应用,直到您可以删除png。
在附注上:提醒我不要使用可以杀死办公室的应用程序,也不要丢弃我所做的任何工作。
您应该使用您开始或更好的每个进程的PID,使用IPC发送一个友好的关闭请求,可以在关闭前清理资源。 对于powerpoint来说,这与在应用程序对象上调用Quit()
很简单。
上一篇: How to delete files programatically?
下一篇: Closing a process child window (e.g. a Word window) accessing a specific file