Когда безопасно удалить исходный файл изображения в .Net? - PullRequest
3 голосов
/ 19 марта 2012

При использовании кода ниже я иногда получаю сообщение об ошибке «Произошла общая ошибка в 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;
   }

}

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Я думаю, теперь у меня это работает.Проблема не в коде, который я вам показал.После сохранения миниатюры в файл я записал ее в поток ответов http и НЕ УДАЛЕН миниатюру изображения.Когда поступил другой запрос, в результате которого был сохранен этот файл, он не смог перезаписать файл изображения, поскольку он все еще был заблокирован из последнего запроса.

0 голосов
/ 19 марта 2012

Вы пробовали что-то подобное

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 выражение.

...