在.Net中删除图像源文件何时安全?
当使用下面的代码时,我有时会遇到错误“GDI+中发生了一个通用错误。在System.Drawing.Image.Save”。我开始相信这是因为我在保存新创建的图像之前删除了源图像。是这样吗?什么时候删除源图像文件才是真正安全的呢 子类:在.Net中删除图像源文件何时安全?,.net,image,gdi+,.net,Image,Gdi+,当使用下面的代码时,我有时会遇到错误“GDI+中发生了一个通用错误。在System.Drawing.Image.Save”。我开始相信这是因为我在保存新创建的图像之前删除了源图像。是这样吗?什么时候删除源图像文件才是真正安全的呢 子类: thumbnailImage = GetThumb(); thumbnailImage.Save(fullDestinationFilename); 基类: public virtual Image GetThumb() { using (var im
thumbnailImage = GetThumb();
thumbnailImage.Save(fullDestinationFilename);
基类:
public virtual Image GetThumb() {
using (var image = Image.FromFile(sourceFile)) {
thumbImage = Crop(image, BrowserWidth, BrowserHeight));
}
File.Delete(sourceFile);
return thumbImage;
}
private static Image Crop(Image image, int width, int height) {
var croppedImage = new Bitmap(width, height);
using (var g = Graphics.FromImage(croppedImage)){
g.DrawImage(image, 0, 0, image.Width, image.Height);
return croppedImage;
}
}你试过这样的东西吗
public virtual Image GetThumb() {
using (var image = Image.FromFile(sourceFile)) {
thumbImage = Crop(image, BrowserWidth, BrowserHeight));
}
if(thumbImage != null)
{
File.Delete(sourceFile);
}
return thumbImage;
}
另外,我认为如果你使用try catch语句会更好。我想我现在已经开始工作了。问题不在于我给你看的代码。在将缩略图保存到文件后,我将其写入http响应流,并且没有处理缩略图图像。当另一个导致保存该文件的请求传入时,它无法覆盖该图像文件,因为它仍然被上次请求锁定。这不是答案,而是一个问题/猜测。一个是错误的,顺便说一句。如果您从文件中加载图像/位图,则无法删除该实例的源。不确定确切的细节,但这是一个已知的“怪癖”。我意识到我可以测试完全不删除源文件,所以我这样做了,但有时仍然会抛出异常。我现在不知道,这不是你的密码。删除文件可能很棘手,可能还有另一个过程正在查看该文件。一种可能的解决方法是在删除文件之前重命名该文件。如果删除失败,那么您下次可以先删除重命名的文件来踩踏它。删除文件不是问题,而是保存从原始图像(sourceFile)创建的新图像。可能是裁剪方法吗?处理图形对象然后返回图像是否不好?