使用File.Delete()方法删除文件时出错

时间:2012-05-05 05:36:21

标签: c# winforms visual-studio-2010

我在visual studio 2010中编写了一个winform应用程序。在其中一种形式中,用户可以浏览本地系统并选择一个图像,因此应用程序会将该图像(使用File.Copy()方法)复制到其文件夹中。 问题是当用户想要删除该图像(File.Delete()方法)时,我收到如下错误:

  

无法删除此文件,因为它被其他进程使用。

我不知道这个错误是什么意思,因为我没有在其他进程中使用图像文件。

3 个答案:

答案 0 :(得分:3)

  

无法删除此文件,因为它被其他进程使用。

这条消息对程序员来说并不是非常有用,因为当你开发代码时,其他进程几乎总是你的进程。

图像文件很可能发生这种情况,从图像文件创建图像或位图对象会在文件上放置 lock 。创建锁是因为GDI +在文件内容上创建了一个内存映射视图,这是一种强大的优化,可以将位图数据保留在页面文件之外。对大型图像很重要,它们可以包含许多兆字节的像素数据。

保持锁定,直到在代码中显式调用其Dispose()方法。因此,请确保在尝试保存图像之前已完成。在极少数情况下,您可能需要创建一个图像副本以允许您处理原始图像,使用带有Image参数的Bitmap()构造函数重载。

答案 1 :(得分:0)

当我们从C#代码复制文件并粘贴它时,即使该程序维护了原始/复制文件的链接/信息,也会发生这种情况。对于未由程序或文件夹中已存在的文件复制的文件,不会发生这种情况。

另一种方法是触发copy shell / dos命令。这种方法存在于此article

中 dos中的

正常复制命令就像

  

copy originalfilenamewithpath destinationfilenamewithpath。

要了解有关复制命令的更多信息,请转到dos并写入copy /?并按Enter键。

答案 2 :(得分:-1)

同意康拉德建议的内容,尽管有一些边缘情况,其中Process Explorer可能不可靠,或者您可以尝试Unlocker