2011-03-25 74 views
1

好的新問題這是我的完整代碼我將解釋我正在嘗試做的事情並對每個部分進行細分,以便您可以看到我想要實現的目標:當前文件夾中的圖片在新上傳時未被刪除

全碼:

protected void UploadButton_Click(object sender, EventArgs e) 
{ 
    if (FileUploadControl.HasFile) 
    { 
     try 
     { 
     string theUserId = Session["UserID"].ToString(); 
     OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=x; Password=x;"); 
     cn.Open(); 

     OdbcCommand sc = new OdbcCommand(string.Format("SELECT picturepath FROM Pictures WHERE UserID ='{0}'", theUserId), cn); 
     OdbcDataReader reader = sc.ExecuteReader(); 

     while (reader.Read()) 
     { 
      if (System.IO.File.Exists(Convert.ToString(reader[0]))) 
      { 
      System.IO.File.Delete(Convert.ToString(reader[0])); 
      } 
     } 

     string filenameDB = Path.GetFileName(FileUploadControl.FileName); 
     string fileuploadpath = Server.MapPath("~/userdata/" + theUserId + 
           "/uploadedimage/") + 
           Path.GetFileName(FileUploadControl.FileName); 
     FileUploadControl.SaveAs(fileuploadpath); 
     string fileuploadpaths = ("~/userdata/" + theUserId + "/uploadedimage/") + 
           filenameDB; 
     StatusLabel.Text = "Upload status: File uploaded!"; 

     OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('" + theUserId + "','" + fileuploadpaths + "')", cn); 
     cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
     StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
     } 
    } 
    } 
} 

好吧,我試圖做的是選擇與用戶ID那麼圖片的路徑,如果一個用戶ID是存在具有相同的userid我嘗試上傳刪除該文件的第一部分是存在(未存儲在數據庫中,因此IO)此部分不起作用當前用戶標識的文件路徑名未被刪除。

OdbcCommand sc = new OdbcCommand(string.Format("SELECT picturepath FROM Pictures WHERE UserID ='{0}'", theUserId), cn); 
OdbcDataReader reader = sc.ExecuteReader(); 

while (reader.Read()) 
{ 
    if (System.IO.File.Exists(Convert.ToString(reader[0]))) 
    { 
    System.IO.File.Delete(Convert.ToString(reader[0])); 
    } 
} 

第二部分剛插入新的文件上傳路徑和名稱到我的數據庫與當前用戶ID(這工作)的文件上傳到正確的文件夾和其插入到我的數據庫。我可以將其更改爲UPDATE,而不是插入atm而不是挑剔。

string filenameDB = Path.GetFileName(FileUploadControl.FileName); 
string fileuploadpath = Server.MapPath("~/userdata/" + theUserId + 
         "/uploadedimage/") + 
         Path.GetFileName(FileUploadControl.FileName); 
FileUploadControl.SaveAs(fileuploadpath); 
string fileuploadpaths = ("~/userdata/" + theUserId + "/uploadedimage/") + 
         filenameDB; 
StatusLabel.Text = "Upload status: File uploaded!"; 

OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('" + theUserId + "','" + fileuploadpaths + "')", cn); 
cmd.ExecuteNonQuery(); 

所以我的問題是,爲什麼我的if語句不刪除已保存的記錄在我的數據庫當前圖片的路徑?發生的一切是我的新圖像上傳到相同的文件夾,但舊的圖像仍然存在?

請記住,雖然我不想刪除「相同」的文件名,但是一個簡單的saveas會覆蓋已經在我的代碼中的文件,我需要的是我的代碼刪除當前處於userid特定狀態的任何圖像當我試圖保存新的圖片上傳文件夾時。

任何想法對代碼有一些幫助?

謝謝你們

+0

重讀此其挺難protray什麼即時試圖解釋希望任何expereinced程序員就明白了我在做什麼:)抱歉的最佳方式,我可以解釋它 – 2011-03-25 22:54:19

+0

你有沒有試過調試這段代碼?感興趣的是while循環中的if塊。有些東西告訴我FileExists失敗了。 – 2011-03-25 23:01:58

+0

是或文件刪除,因爲刪除的路徑名是這樣的:'〜/ userdata/2/uploadedimage/batman-for-facebook.jpg'我試過調試但沒有任何報告 – 2011-03-25 23:05:36

回答

3

看你的代碼,相信SystemDown在評論答案:

當您將文件保存到您使用下面的代碼盤:

// Even though you've just calculated the result of Path.GetFileName you 
// redo it here? 
string fileuploadpath = Server.MapPath("~/userdata/" + theUserId 
         + "/uploadedimage/") 
         + Path.GetFileName(FileUploadControl.FileName); 
FileUploadControl.SaveAs(fileuploadpath); 

然後你把它存儲在數據庫中:

string filenameDB = Path.GetFileName(FileUploadControl.FileName); 
string fileuploadpaths = ("~/userdata/" + theUserId + "/uploadedimage/") + 
         filenameDB; 

但是,當你刪除文件喲你就像不執行使用Server.Mappath:

System.IO.File.Delete(Convert.ToString(reader[0])); 

更改該行:

System.IO.File.Delete(Server.MapPath(Convert.ToString(reader[0]))); 

,它應該所有的工作。

+0

我希望我的大腦可以長出一些新的神經元:(我應該已經發現了這個問題。謝謝Zhaph – 2011-03-25 23:42:56

+1

@Garrith Graham沒關係,我覺得這很明顯,我錯過了,另一對眼睛很快就會發現它。 – 2011-03-25 23:44:58

0

你應該使用來使用Server.Mappath發現,如果圖像已經存在或不然後再試着刪除,即時通訊

相關問題