2010-07-30 49 views
0

在asp.net上傳到服務器,我們已上傳.jpeg文件,並使用下面的代碼保存在此作爲位圖圖像異常在刪除圖像在ASP.Net

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的」,因爲它正由另一個進程使用。

有誰知道,爲什麼會發生這種情況?
在此先感謝。

回答

0

垃圾收集器不會立即將它的資源釋放到您的文件中。

您可以嘗試並運行GC.Collect()來「強制」垃圾收集器執行此操作。在您放棄文件之後並嘗試刪除文件之前執行此操作。

編輯:我在你的機器上有一些反病毒軟件,它很可能是它使用你的文件。相同的,如果你有一個資源管理器窗口打開到創建圖像的文件夾等

+0

謝謝Jesper :) 第一個選項爲我工作。 – 2010-07-30 08:36:47

0

如何嘗試第一次沖洗,然後關閉流?

0

另外:

  • 的,以構建需要調用Dispose()爲您的照顧。你不需要明確地做,事實上,這樣做可能會破壞實施不當的IDisposables。
  • 你確定文件名每次都不一樣嗎?如果不是,併發請求可能會覆蓋彼此的文件,所以你得到的異常可能是由一個線程試圖刪除該文件而另一個線程覆蓋它。