删除ASP.Net中上传到服务器的图像时出现异常

时间:2010-07-30 05:43:48

标签: asp.net file-upload

在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();

上传后,如果我们执行perfrom删除操作,则会抛出错误。
我们正在遵循这样的代码;

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

}


例外情况说:进程无法访问文件'abc.jpg',因为它正被另一个进程使用。

有谁知道,为什么会发生这种情况? 提前谢谢。

3 个答案:

答案 0 :(得分:0)

首先尝试刷新然后关闭流程怎么样?

答案 1 :(得分:0)

此外:

  • using构造负责为您调用Dispose()。您不需要明确地执行此操作,事实上,这样做可能会破坏不正确实现的IDisposables。
  • 您是否绝对确定每次文件名都不同?如果没有,并发请求可能会覆盖彼此的文件,因此您获得的异常可能是由于一个线程试图删除该文件而另一个线程正在覆盖该文件引起的。

答案 2 :(得分:0)

垃圾收集器不会立即将其资源释放到您的文件中。

您可以尝试运行GC.Collect()来强制垃圾收集器执行此操作。在处理完文件之后,在尝试删除文件之前,请执行此操作。

编辑:我的机器上有一些防病毒软件,很可能是你正在使用你的文件。如果您有一个资源管理器窗口打开到创建图像的文件夹等,则相同。