-1

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

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

4 回答 4

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

于 2013-08-05T12:08:47.967 回答
0

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

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

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

于 2013-08-05T12:13:07.123 回答
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);
}

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

于 2013-08-05T12:14:25.543 回答
0

该文件需要被其他程序释放才能删除。如果您不知道,您可以使用Process Explorer找出锁定它的原因。

于 2013-08-05T12:10:00.967 回答