Исключение при удалении изображения, загруженного на сервер в ASP.Net - PullRequest
0 голосов
/ 30 июля 2010

В asp.net мы загрузили файл .jpeg и сохранили его как растровое изображение, используя следующий код

HttpPostedFile uploadFile;System.IO.Stream stream = uploadFile.InputStream;

 using (System.Drawing.Image imgSource = System.Drawing.Bitmap.FromStream(stream))
{
    System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);

    using (System.Drawing.Image imgThumbnail = imgSource.GetThumbnailImage(imgSource.Width, imgSource.Height, myCallback, IntPtr.Zero))
    {

       imgThumbnail.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);

        imgThumbnail.Dispose();
    }
    imgSource.Dispose();
}

stream.Close();
stream.Flush();
stream.Dispose();

После загрузки, если мы выполним операцию удаления, она выдаст ошибку.
Для этого мы следуем следующему коду:

if (File.Exists(filePath))
{
     File.Delete(filePath);

}


Исключение говорит: процесс не может получить доступ к файлу abc.jpg, поскольку он используется другим процессом.

Кто-нибудь знает, почему это происходит?
Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 30 июля 2010

Также:

  • Конструкция using заботится о вызове Dispose () для вас.Вам не нужно делать это явно, и на самом деле это может нарушить неправильно реализованные IDisposables.
  • Вы абсолютно уверены, что имя файла каждый раз отличается?В противном случае одновременные запросы могут перезаписывать файлы друг друга, поэтому полученное исключение может быть вызвано тем, что один поток пытается удалить файл, в то время как другой перезаписывает его.
0 голосов
/ 30 июля 2010

Сборщик мусора не сразу высвобождает свои ресурсы в ваш файл.

Вы можете попробовать запустить GC.Collect(), чтобы "заставить" сборщик мусора сделать свое дело.Сделайте это после того, как вы удалили свой файл и перед тем, как попытаться удалить его.

Редактировать: Если на вашем компьютере установлено антивирусное программное обеспечение, вероятно, именно оно использует ваш файл.То же самое, если у вас есть окно проводника, открытое для папки, в которой создается изображение и т. Д.

0 голосов
/ 30 июля 2010

Как насчет попытки сначала очистить, а затем закрыть поток?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...