删除c#中其他进程使用的文件

时间:2013-08-05 12:01:37

标签: c#

我正在尝试删除我的应用程序的某个其他进程使用的一个文件。 所以它给出了一个错误,该文件被某个另一个进程使用。

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{

    DirectoryInfo NewDir = new DirectoryInfo(imagefolderpath1);
    FileInfo[] files = NewDir.GetFiles("*.jpg");
    foreach (var item in files)
    {
        string strFile = imagefolderpath1 + "\\" + item.ToString();
        if (File.Exists(strFile))
        {

            File.Delete(strFile);
        }
    }

}

我该如何解决这个问题,请你帮帮我????

4 个答案:

答案 0 :(得分:3)

您需要通过以下代码终止导致此问题的进程,例如:

 string fileName = @"D:\pathname.jpg";//Path to locked file

Process Handletool = new Process();
Handletool.StartInfo.FileName = "handle.exe";
Handletool.StartInfo.Arguments = fileName+" /accepteula";
Handletool.StartInfo.UseShellExecute = false;
Handletool.StartInfo.RedirectStandardOutput = true;
Handletool.Start();           
Handletool.WaitForExit();
string outputTool = Handletool.StandardOutput.ReadToEnd();

string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
foreach(Match match in Regex.Matches(outputTool, matchPattern))
{
    Process.GetProcessById(int.Parse(match.Value)).Kill();
}

你可以从http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

获取Handle.exe

答案 1 :(得分:0)

该文件需要在被删除之前由其他程序释放。如果您不知道,可以使用Process Explorer找出锁定它的内容。

答案 2 :(得分:0)

您无法访问其他进程使用的文件。但是,如果您的应用程序稍后执行此操作并不重要,则可以在System.AppDomain.ProcessExit事件处理程序中执行此操作。 只需将文件添加到集中管理列表并注册清理例程,如下所示:

AppDomain.CurrentDomain.ProcessExit += new EventHandler(deleteFilesIfPossibleNow);

在处理程序中,如果仍然从其他进程访问文件,则仍必须处理异常。

答案 3 :(得分:0)

而不是使用_FormClosed,您可能想尝试从其他代码启动表单,如下所示:

DirectoryInfo NewDir;
FileInfo[] files;

using (var form = new Form1())
{
    var result = form.ShowDialog();
    if (result == DialogResult.Close)
    {
        NewDir = new DirectoryInfo(imagefolderpath1);
        files = NewDir.GetFiles("*.jpg");
    }
}

foreach(var item in files) { 
    string strFile = imagefolderpath1 + "\\" + item.toString();
    File.Delete(strFile);
}

我不是百分之百地确定你的程序是如何工作的,但你可以在它们关闭之前从表单中获取信息,然后使用这种方法关闭它们之后使用的文件