不能从目录中删除文件
本文关键字:删除 文件 不能 | 更新日期: 2023-09-27 18:01:53
我在下面描述我的工作过程:
-
从目录中获取图像文件
-
创建用于显示图像的
PictureBox
数组。 -
从我从目录中得到的文件创建一个
Image
数组。我正在创建这个数组来制作PictureBox
的图像源。 -
我正在复制文件到另一个目录。由这个:
File.Copy(allFiles[i],fullPath+fullName+"-AA"+nameString+ext);
-
现在我想从目录中删除文件。我这样做:
File.Delete(allFiles[i]);
但是它给了我这个错误:
进程无法访问文件"C:'G'a.jpg",因为该文件正在被其他进程使用。
请告诉我如何解决这个问题?我没有附上完整的代码,因为它太大了。如果你想看我代码的任何部分,请问我。
您可能直接从文件加载图像。例如,
PictureBox[i] = Image.FromFile(allFiles[i]);
如果您查找Image.FromFile
方法的文档,您将发现它实际上锁定了文件,直到处置了Image
。(实际上,Image
类中的大多数其他加载方法也会锁定文件,直到Image
被释放。)
所以要解决这个问题,将图片文件内容复制到内存并从那里加载。例如,
PictureBox[i] = Image.FromStream(new MemoryStream(File.ReadAllBytes(allFiles[i])));
这样,文件本身将保持解锁状态,您可以自由移动/删除它。
当然在使用
首先将文件复制到另一个目录(步骤4),
删除旧目录
然后从新复制的目录执行第三步(将其分配给一个数组并将其加载到PictureBox)。
替代:在删除文件之前必须关闭流处理程序。
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (PictureBox[i] = Image.FromStream(fs))
{
...
}