Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.Net中删除图像源文件何时安全?_.net_Image_Gdi+ - Fatal编程技术网

在.Net中删除图像源文件何时安全?

在.Net中删除图像源文件何时安全?,.net,image,gdi+,.net,Image,Gdi+,当使用下面的代码时,我有时会遇到错误“GDI+中发生了一个通用错误。在System.Drawing.Image.Save”。我开始相信这是因为我在保存新创建的图像之前删除了源图像。是这样吗?什么时候删除源图像文件才是真正安全的呢 子类: thumbnailImage = GetThumb(); thumbnailImage.Save(fullDestinationFilename); 基类: public virtual Image GetThumb() { using (var im

当使用下面的代码时,我有时会遇到错误“GDI+中发生了一个通用错误。在System.Drawing.Image.Save”。我开始相信这是因为我在保存新创建的图像之前删除了源图像。是这样吗?什么时候删除源图像文件才是真正安全的呢

子类:

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)创建的新图像。可能是裁剪方法吗?处理图形对象然后返回图像是否不好?