不能从目录中删除文件

本文关键字:删除 文件 不能 | 更新日期: 2023-09-27 18:01:53

我在下面描述我的工作过程:

  1. 从目录中获取图像文件

  2. 创建用于显示图像的PictureBox数组。

  3. 从我从目录中得到的文件创建一个Image数组。我正在创建这个数组来制作PictureBox的图像源。

  4. 我正在复制文件到另一个目录。由这个:

    File.Copy(allFiles[i],fullPath+fullName+"-AA"+nameString+ext);
    
  5. 现在我想从目录中删除文件。我这样做:

    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))
 {
  ...
 }