我想在我的计算机上删除一个文件,但该应用程序会抛出一个异常,即该目录正忙。我的第一个想法是在我的类中实现一个删除文件的dispose方法。 谁知道怎么做?
它实际上是一个显示图像的Picturebox,如果单击图像旁边的按钮,则可以将其删除,从而将其删除。它可以阻止我的文件路径。
picobx.Image = Image.FromFile(//path)
这有什么解决方案吗?
PS。我想处理资源,以便我可以删除...
这样做:
File.Delete(// path )
答案 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);