无法从目录中删除文件

时间:2014-05-05 06:02:03

标签: c# winforms file copy delete-file

我正在描述我的工作流程:

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

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

  3. 从我从目录中获取的文件创建Image数组。我正在创建此数组以生成PictureBox

  4. 的图像源
  5. 我正在将文件复制到另一个目录。通过这个:

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

    File.Delete(allFiles[i]);
    
  7. 但它给了我这个错误:

      

    该进程无法访问文件'C:\ G \ a.jpg',因为它正由另一个进程使用。

    请告诉我如何解决这个问题?我没有附上完整的代码,因为它会很大。请问我是否要查看我的代码的任何部分。

2 个答案:

答案 0 :(得分:2)

您可能直接从文件加载图像。例如,

PictureBox[i] = Image.FromFile(allFiles[i]);

如果您查找Image.FromFile方法的文档,您会发现它实际上会锁定文件,直到Image被释放。 (实际上,Image类中的大多数其他加载方法也会锁定文件,直到Image被释放。)

因此,要解决此问题,请将图片文件内容复制到内存并从那里加载。例如,

PictureBox[i] = Image.FromStream(new MemoryStream(File.ReadAllBytes(allFiles[i])));

这样,文件本身将保持解锁状态,您可以自由移动/删除它。

答案 1 :(得分:0)

当然正在使用它。

首先将文件复制到另一个目录(步骤4),

删除旧目录

然后从新复制的目录中执行第三步(将其分配给数组并将其加载到PictureBox)。

替代:

您必须在删除文件之前关闭流处理程序..

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
 using (PictureBox[i] = Image.FromStream(fs))
 {
  ...
 }