使用 File.Delete() 方法删除文件时出错
本文关键字:删除 文件 出错 方法 File Delete 使用 | 更新日期: 2023-09-27 18:33:25
我在Visual Studio中编写了一个wform应用程序,2010.In 用户可以浏览本地系统并选择图像的形式之一,因此应用程序会将该图像(使用File.Copy()方法)复制到其文件夹中。问题是当用户想要删除该图像(File.Delete()方法)时,我收到这样的错误:
无法删除此文件,因为它正由另一个进程使用。
我不知道这个错误说了什么,因为我没有在其他进程中使用图像文件。
无法删除此文件,因为它正由另一个进程使用。
该消息对程序员来说并不是很有帮助,因为当您开发代码时发生时,其他过程几乎总是您的过程。
这很可能发生在图像文件中,从图像文件创建图像或位图对象会锁定文件。 创建锁是因为 GDI+ 在文件内容上创建内存映射视图,这是一种强大的优化,可将位图数据排除在分页文件之外。 对于大图像非常重要,它们可以包含数兆字节的像素数据。
该锁将一直保留,直到您在代码中显式调用其 Dispose() 方法。 因此,请确保在尝试保存图像之前已完成此操作。 在极少数情况下,您可能需要创建图像的副本以允许您释放原始图像,请使用采用 Image 参数的 Bitmap() 构造函数重载。
正在发生的事情是,当我们从 C# 代码复制文件并粘贴它时,即使该程序维护了指向原始/复制文件的链接/信息。这不会发生在未由程序复制的文件或文件夹中已存在的文件上。
另一种方法是触发复制 shell/dos 命令。本文中提供了一种方法
DOS中的普通复制命令就像
复制原始文件名与路径目标文件名与路径。
要了解有关复制命令的更多信息,请转到dos并写入copy /?
然后按回车键。
同意Conrad的建议,尽管在某些情况下Process Explorer可能不可靠,或者您可以尝试Unlocker