2009-09-11 40 views
1

中的文件(FileInfo)。當我上傳圖像我做了圖像管理。之後,我想刪除原始圖像,但我得到錯誤,該文件已在使用,如下面 (該進程無法訪問文件'D:\ sasiweb \ myimage \ Images \ jalsa.jpeg',因爲它正在另一個進程使用)刪除我的頁面中的asp.net

,這是我的代碼

保護無效sizeManage(字符串文件名){

string fn = Server.MapPath("~/Images/" + filename); 

    System.Drawing.Bitmap newimg = new System.Drawing.Bitmap(fn); 
    int h = newimg.Height; 
    int w = newimg.Width; 

    if (w > 100) 
    { 
     objJpeg = new ASPJPEGLib.ASPJpeg(); 
     objJpeg.Open(Server.MapPath("~/Images/" + FileUpload1.FileName.ToString())); 

     int L = 100; 
     objJpeg.Width = L; 

     objJpeg.Height = objJpeg.OriginalHeight * L/objJpeg.OriginalWidth; 
     objJpeg.Save(Server.MapPath("~/Images/" + "small" + FileUpload1.FileName)); 

     string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()); 
     FileInfo file = new FileInfo(path); 
     file.Delete(); 


    } 
    else 
    { 

    } 


} 


protected void Button1_Click(object sender, EventArgs e) 
{ 

    FileUpload1.SaveAs(Server.MapPath("~/Images/" + FileUpload1.FileName.ToString())); 
    sizeManage(FileUpload1.FileName.ToString()); 

} 

我正在逐漸file.delete錯誤()。

(該進程無法訪問該文件 'd:\ sasiweb \ MYIMAGE \圖片\ jalsa.jpeg',因爲它正被另一個進程使用。)

+0

一些程序員發送的答案,但它再次收到相同的錯誤 – 2009-09-11 10:05:34

+0

(重新您在自己的後立起主持人標誌;主持人標記功能是行政問題,網站濫用等 - 不適用於常規問題請求) – 2009-09-11 10:30:45

+0

可能是.NET文件垃圾收集器出現並刪除它之前,該文件中保存的上一個對象仍在內存中。 – awe 2009-09-11 10:50:46

回答

2

您必須關閉

objJpeg 

來做這個操作。

由於使用objJpeg對象打開文件,必須釋放它才能刪除文件。

string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()); 
FileInfo file = new FileInfo(path); 

objJpeg.Close(); // release the resources held by the object 
file.Delete(); 

或者你可以在using語句中編寫文件打開過程。

+0

對不起同樣的問題我得到 – 2009-09-11 09:52:40

+0

確定其工作感謝 – 2009-09-11 10:30:01

1

ASPJPEGLib.ASPJpeg()是否實現IDisposable?如果確實如此,則應在保存後處置它。最簡單的方法是將其包裝在Using語句中,例如。

 using (objJpeg = new ASPJPEGLib.ASPJpeg()) 
     { 
      objJpeg.Open(Server.MapPath("~/Images/" + FileUpload1.FileName.ToString())); 

      int L = 100; 
      objJpeg.Width = L; 

      objJpeg.Height = objJpeg.OriginalHeight * L/objJpeg.OriginalWidth; 
      objJpeg.Save(Server.MapPath("~/Images/" + "small" + FileUpload1.FileName)); 
     } 

     string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()); 
     FileInfo file = new FileInfo(path); 
     file.Delete(); 
+0

確定它工作感謝 – 2009-09-11 10:29:13

0

您必須關閉該文件。
...

objJpeg.Save(Server.MapPath("~/Images/" + "small" + FileUpload1.FileName)); 
    objJpeg.Close(); 
    string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()); 

...

+0

對不起同樣的問題我越來越 – 2009-09-11 09:52:08

+0

確定它工作正常 – 2009-09-11 10:28:42