【问题标题】:Can't delete file (process cannot access the file because it is being used by another process)无法删除文件(进程无法访问该文件,因为它正被另一个进程使用)
【发布时间】:2012-01-30 14:05:29
【问题描述】:

我尝试从我指定的目录中删除文件。第一次效果很好,但第二次它给出了下一个异常:

该进程无法访问文件“C:\Users\DAAGEU\AppData\Local\Temp\Manual_Avatar\AdamBody_1K_Pants_Black_Blended.jpg”,因为它正被另一个进程使用。

foreach (String file in Directory.GetFiles((userDirectory)))
{
    try
    {
        //using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate))
        //{
            //fs.Unlock(fs.Position, fs.Length);
            //fs.Dispose();
            //fs.Close();
        //}

        File.Delete(file);
    }
    catch (Exception)
    {
        throw;
    }
}

似乎只有图像被“锁定”。我在 stackoverflow 上找到了一些东西,但没有任何帮助?我使用一些 3rd 方软件来生成图像。

任何 1 都知道如何解决这个问题或解决它??

回答:

我发现了问题。我使用的是 WinForms,在一个 WinForm 中我使用图像托管 WPF 控件。我发现关闭它后我没有处理它。所以我的错我也应该在这个问题中提到这一点......

【问题讨论】:

  • 您是否提供所有代码?您是否在相同的代码中创建这些图像,如果是,您是否关闭并处理创建图像的流或进程?
  • @Daniel A. White,已评论。 @ mservidio 该目录是由一些第 3 方软件生成的。如果我进行更改,我想删除所有文件并使用 3rd 方软件重新生成文件夹,这就是想法!
  • 尝试文件解锁实用程序之一(unlocker、lockhunter)以查看哪个进程正在保存文件。如果是您的应用程序,那么您还没有向我们展示更多代码。
  • 运行 procmon 以查看哪个进程拥有该文件的句柄。
  • 不要使用catch (Exception ex) { throw ex; },它不仅没有意义,还会破坏原始异常(它的堆栈跟踪)中的有用信息。

标签: c#


【解决方案1】:

尝试通过 Windows 资源管理器以通常的方式删除您的文件。如果你得到那个恼人的弹出窗口说无法删除...它正在被其他人或程序使用,你可以下载 Unlocker 并让它准确地告诉你哪个进程锁定了它。多年来,这个小程序对我非常有用。它甚至可以从记忆棒运行,因此可以选择安装。安装它绝对是一个加分项,因为当您收到该弹出窗口时,它会自动弹出锁定程序的名称。

【讨论】:

  • 我发现了问题。我使用的是 WinForms,在一个 WinForm 中我使用图像托管 WPF 控件。我发现关闭它后我没有处理它。所以......但是谢谢你提供一些很好的建议;-)!
猜你喜欢
  • 1970-01-01
  • 2010-12-10
相关资源
最近更新 更多