【发布时间】: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#