如何以编程方式删除文件?

以下是我用来关闭应用程序及其关联进程的代码,并删除在使用应用程序期间已提取的所有文件:

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()很简单。

链接地址: http://www.djcxy.com/p/40551.html

上一篇: How to delete files programatically?

下一篇: Closing a process child window (e.g. a Word window) accessing a specific file