所以我做了一个简单的项目,当我点击按钮时,图片编辑从文件夹文件中获取图像,但是当我想删除包含图像的文件夹时,它会给我一个错误。代码如下
private void button1_Click(object sender, EventArgs e)
{
string pathx = AppDomain.CurrentDomain.BaseDirectory + "\\TempImage\\" + "naruto" + ".png";
pictureEdit1.Image = Image.FromFile(pathx);
}
private void button2_Click(object sender, EventArgs e)
{
string dir = AppDomain.CurrentDomain.BaseDirectory + "\\TempImage";
try {
if (Directory.Exists(dir))
{
//////give me an error in here///////
Directory.Delete(dir, true);
}
else
{
MessageBox.Show("folder not found");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这个目的,是在我的主项目中,用于缓存目的。所以我从服务器到本地应对后从某个文件夹中获取图像。当我想关闭主项目时,我需要清除缓存或文件夹
更新
这是更好的备用1或备用2(处置)
private void button1_Click(object sender, EventArgs e)
{
string pathx = AppDomain.CurrentDomain.BaseDirectory + "\\TempImage\\" + "naruto" + ".png";
//alternate1
using (FileStream stream = new FileStream(pathx, FileMode.Open, FileAccess.Read))
{
pictureEdit1.Image = Image.FromStream(stream);
//stream.Dispose();
}
//alternate2
//Image img = new Bitmap(pathx);
//pictureEdit1.Image = img.GetThumbnailImage(pictureEdit1.Width, pictureEdit1.Height, null, new IntPtr());
//img.Dispose();
}
答案 0 :(得分:1)
System.Drawing.Bitmap(http://msdn.microsoft.com/en-us/library/0cbhe98f.aspx)上的文档说:
文件保持锁定状态,直到丢弃位图。
要解决此问题,您应该替换此行:
pictureEdit1.Image = Image.FromFile(pathx);
有了这个:
Image img = new Bitmap(pathx);
pictureEdit1.Image = img.GetThumbnailImage(pictureEdit1.Width, pictureEdit1.Height, null, new IntPtr());
img.Dispose();
这应该只加载Bitmap足够长的时间来创建用于PictureBox控件的图像的缩略图版本,然后立即处理它,释放文件上的锁定但仍然在屏幕上显示图像。
希望这有帮助!
修改:以下是使用使用执行相同操作的版本:
using (Image img = new Bitmap(pathx)) {
pictureEdit1.Image = img.GetThumbnailImage(pictureEdit1.Width, pictureEdit1.Height, null, new IntPtr());
}