在File.Delete方法中实现IDisposable?

时间:2009-12-08 14:11:23

标签: c#

我想在我的计算机上删除一个文件,但该应用程序会抛出一个异常,即该目录正忙。我的第一个想法是在我的类中实现一个删除文件的dispose方法。 谁知道怎么做?

它实际上是一个显示图像的Picturebox,如果单击图像旁边的按钮,则可以将其删除,从而将其删除。它可以阻止我的文件路径。

picobx.Image = Image.FromFile(//path)

这有什么解决方案吗?

PS。我想处理资源,以便我可以删除...

这样做:

File.Delete(// path ) 

5 个答案:

答案 0 :(得分:7)

Image.FromFile方法实际上锁定了文件,这就是为什么你无法删除它。最好的方法是使用bytes = File.ReadBytes(filename)将图像作为字节数组读取,从字节数组创建一个内存流,将内存流传递给Image.FromStream以显示图像,然后单击按钮将其删除

答案 1 :(得分:0)

我想你要做的是以下几点:

try {
    File.Delete(yourFile);
}
catch (IOException ex) {
    // Do something with the exception here, like showing the user that the file can't be deleted)
}

无法删除即使用中或权限不足的目录中的文件。因此,如果您收到错误,您应该查看文件正在使用/无法访问的原因,无论如何。

根据您的修改,我建议您执行以下操作:

Image myImage = Image.FromFile(//path);
picobx.Image = myImage;

//click button
picobx.Image = null;
myImage.Dispose();
File.Delete(//path);

答案 2 :(得分:0)

好的 - 我明白你要做什么。

图像本身实现了IDisposable。您不需要自己实现IDisposable,只需要确保在图像上调用Dispose,或使用“using”语法。

问题是,直到图像 - 来自Image.FromFile(// path)的返回引用 - 被丢弃,它仍然会锁定底层文件,因此您将始终获得异常“进程无法访问文件”< / p>

答案 3 :(得分:0)

编辑我在没有阅读他的新编辑的情况下发布了这个:我看到你正在使用Image.FromFile。

如果文件没有有效的图像格式,或者GDI +不支持文件的像素格式,则此方法会抛出OutOfMemoryException异常。

您必须先将图像丢弃,然后才能将其删除。

Image.FromFile

文件保持锁定状态,直到图像被丢弃。

private Image image;

在你的图片加载功能中:

image = Image.FromFile("path");
picobx.Image = image;

这是你的删除方法;

image.Dispose;
File.Delete("path");

---不再相关---

如果您正在从流中读取文件并将流转换为图像。然后,您尝试删除文件而不关闭流,您将获得IOException。

System.IO.IOException:进程无法访问“File Here”文件,因为它正被另一个进程使用..

以及可能导致此问题的示例

        StreamReader file = new StreamReader(@"C:\trans.txt");
        file.ReadToEnd();

        File.Delete(@"C:\trans.txt");

答案 4 :(得分:0)

正如您所建议的那样,您需要先处理图像,然后才能将其删除:

Image i = this.pictureBox1.Image;
this.pictureBox1.Image = null;
i.Dispose();
File.Delete(filePath);