2

我的 ASP.NET 应用程序具有图像裁剪和调整大小功能。这就需要删除上传的临时图片。一切正常,但是当我尝试删除大于 80 像素 x 80 像素的图像时,我收到“文件已被另一个进程锁定...”错误,即使我已经释放了所有资源。

这是一个片段:

System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone(); //advice from another forum
tempimg.Dispose();

img = resizeImage(img, 200, 200); //delete only works if it's 80, 80
img.Save(newpath);
img.Dispose();

File.Delete(temppath);
4

2 回答 2

1

如果您以这种方式创建图像,它将不会被锁定:

using (FileStream fs = new FileStream(info.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    byte[] data = new byte[fs.Length];
                    int read = fs.Read(data, 0, (int)fs.Length);
                    MemoryStream ms = new MemoryStream(data, false);
                    return Image.FromStream(ms, false, false); // prevent GDI from holding image file open
                }
于 2009-10-10T22:02:37.053 回答
1

我认为您没有处理分配给 img 变量的第一个 Image 实例。

考虑一下:

System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone();
tempimg.Dispose();

System.Drawing.Image img2 = resizeImage(img, 200, 200);
img2.Save(newpath);
img2.Dispose();
img.Dispose();

File.Delete(temppath);
于 2009-10-10T22:06:07.143 回答