【问题标题】:Exception in deleting image uploaded to the server in ASP.Net在 ASP.Net 中删除上传到服务器的图像时出现异常
【发布时间】:2010-07-30 14:59:19
【问题描述】:

在 asp.net 中,我们上传了一个 .jpeg 文件并使用以下代码将其保存为位图图像

HttpPostedFile 上传文件; System.IO.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',因为它正在被另一个进程使用。

有谁知道,为什么会这样?
提前致谢。

【问题讨论】:

    标签: asp.net file-upload


    【解决方案1】:

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

    您可以尝试运行GC.Collect() 以“强制”垃圾收集器执行此操作。在您处置您的文件之后以及在您尝试删除它之前执行此操作。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        还有:

        • using 构造负责为您调用 Dispose()。您不需要明确地这样做,事实上,这样做可能会破坏未正确实施的 IDisposables。
        • 您确定文件名每次都不同吗?如果不是,并发请求可能会覆盖彼此的文件,因此您遇到的异常可能是由于一个线程试图删除文件而另一个线程正在覆盖它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-07
          • 2012-05-13
          • 2017-12-12
          • 2020-11-25
          • 2016-05-16
          • 1970-01-01
          • 2014-06-30
          • 2018-05-03
          相关资源
          最近更新 更多