无法在 File.Copy 之后进行 File.Delete,因为文件“正在被另一个进程使用”

问题描述 投票:0回答:1

我试图复制一个文件,然后删除它,如下面的代码所示,但不断收到 System.IO。IOException“该进程无法访问文件 [文件名],因为它正在被另一个进程使用。”

File.Copy(sourcefilename, targetfilename);
File.Delete(sourcefilename)

这是在 Windows 窗体应用程序中,其中源文件是当时显示在 PictureBox 控件中的 JPEG 图像。我最终确定使用该文件的“进程”是 PictureBox,因此我必须找到一种方法将文件与控件分离。

我在找到答案后在这里回答我自己的问题,所以请不要告诉我使用 File.Move 代替。我有充分的理由首先使用 File.Copy,然后使用 File.Delete。

解释为什么我这样做,而不是 File.Move:因为根据用户输入,我可能需要将文件复制到多个其他位置(不同的文件夹)。所以我必须将原始文件保留在原始位置,直到所有请求的复制完成,然后才删除原始文件。

c# winforms picturebox ioexception
1个回答
0
投票

我首先尝试用 ImageList 中的图像替换 PictureBox 的图像,与我复制的文件没有连接:

PictureBox.Image = ImageList.Images[0];

现在,我本以为将另一个图像放入控件的 Image 属性中会释放 PictureBox 对文件的保留,但是 没有。甚至没有直接将另一个图像文件分配给控件来释放它。我尝试了以下两种方法,但都不起作用:

PictureBox.Refresh();
PictureBox.Dispose();

最后,我想知道 Image 属性是否有一个可以释放文件的方法,是的,它有一个 Dispose 方法,最终使 PictureBox 释放了文件。

File.Copy(sourcefilename, targetfilename);
PictureBox.Image.Dispose(); // <-- THIS DID THE TRICK
File.Delete(sourcefilename)

此后,删除方法按预期工作。我最终使用 ImageList 将中性图像放入 PictureBox 中,直到用户从列表中选择新图像。

© www.soinside.com 2019 - 2024. All rights reserved.