2011-10-26 127 views
1

我有一個非常簡單的要求,有一個文件夾包含一個圖像文件,我有一個窗體只有一個上傳字段選擇一個圖像,並保存與相同的現有圖像名稱來覆蓋它Fileupload saveas方法不覆蓋

protected void ChangeLogo(object sender, EventArgs e) 
    { 
     if (!ImageUpload.HasFile) 
     { 
      ShowPopup("Logo Upload Canceled", "Please upload the image for the logo.", "stop"); 
     }    
     else //save the image 
     { 
      string logoPath = Server.MapPath("~/images/home/"); 
      string filename = "logo.png"; 

      ImageUpload.SaveAs(logoPath + filename); 
     } 
    } 

我得到一個錯誤: 訪問路徑「C:\的Inetpub \ wwwroot的\網站\圖片\家\ logo.png」被拒絕 即使是在文件夾上完全的訪問控制,但如果我用另一個名字保存它,它只拒絕覆蓋,我需要覆蓋。我想先刪除圖像然後保存,但這很愚蠢,爲什麼我不能覆蓋?

在此先感謝

回答

3

天真的解決方案:

If(File.Exists(logoPath + filename)) 
    File.Delete(logoPath + filename); 
ImageUpload.SaveAs(logoPath + filename); 
+1

由於'FileUpload'使用'FileMode.Create',我的直覺是,這是行不通的,它是在現有的文件權限問題。 –

+0

是的,總是刪除,你不能指望釋放的文件句柄。這也發生在File.IO.MoveFile與複製然後刪除。這是一個底層的Win32事情。 –

+1

是的柯克,原來這是一個權限問題,覆蓋的圖像被標記爲只讀:S 它取消選中它後正在工作。 謝謝所有 – Yasmine