我正在描述我的工作流程:
我从目录中获取图像文件。
创建用于显示图像的PictureBox
数组。
从我从目录中获取的文件创建Image
数组。我正在创建此数组以生成PictureBox
。
我正在将文件复制到另一个目录。通过这个:
File.Copy(allFiles[i],fullPath+fullName+"-AA"+nameString+ext);
现在我要删除目录中的文件。为此,我这样做:
File.Delete(allFiles[i]);
但它给了我这个错误:
该进程无法访问文件'C:\ G \ a.jpg',因为它正由另一个进程使用。
请告诉我如何解决这个问题?我没有附上完整的代码,因为它会很大。请问我是否要查看我的代码的任何部分。
答案 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))
{
...
}