我在visual studio 2010中编写了一个winform应用程序。在其中一种形式中,用户可以浏览本地系统并选择一个图像,因此应用程序会将该图像(使用File.Copy()方法)复制到其文件夹中。 问题是当用户想要删除该图像(File.Delete()方法)时,我收到如下错误:
无法删除此文件,因为它被其他进程使用。
我不知道这个错误是什么意思,因为我没有在其他进程中使用图像文件。
答案 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