2014-09-21 470 views
-1

我試圖檢查服務器上是否存在文件&如果文件存在,警告使用,以便他可以重命名文件&再次上傳。但即使我添加!System.IO.File.ExistsSystem.IO.File.Exists總是返回true

此代碼我的代碼總是返回true是ASP.net Web窗體應用程序

string filename = Path.GetFileName(FileUploadControl.FileName); 
if (System.IO.File.Exists("../pdf/news/" + FileUploadControl.FileName)) 
{ 
    ViewState["_fileName"] = null; 
    StatusLabel.Text = "File with this name already exsists, Please rename file and Upload gain"; 
} 
else 
{ 
    FileUploadControl.SaveAs(Server.MapPath("../pdf/news/") + filename); 
    StatusLabel.Text = "Upload status: File uploaded!"; 
    //_fileName = FileUploadControl.FileName; 
    ViewState["_fileName"] = FileUploadControl.FileName; 
} 

我相信我做錯了什麼,但無法弄清楚什麼。

+0

重複的問題。請閱讀http://stackoverflow.com/questions/19592187/c-sharp-file-exists-returns-true-on-inexistent-file。如果它返回true,則表示它確實存在。編輯:鏈接的問題是一個更新http://stackoverflow.com/questions/4308421/file-exists-returning-true-for-a-file-that-doesnt-exist – 2014-09-21 13:15:32

+0

@RyanAlexander什麼?不存在?我不這麼認爲... – DonBoitnott 2014-09-21 13:17:35

+0

抱歉打字。編輯。 – 2014-09-21 13:18:54

回答

5

這裏最可能的問題是您在存在檢查之前沒有使用Server.MapPath。它在哪裏看?我們不知道。但既然你打算這樣做後:早期移動它:

var path = Path.Combine(Server.MapPath("../pdf/news/"), filename); 

而且使用path的存在檢查,並最終創作。

請注意,修改Web應用程序樹中的文件是一個壞主意:

  • 它可以觸發一個應用程序池重啓
  • 這是一個潛在的黑客攻擊向量
  • 它不規模集羣
+0

謝謝,這解決了這個問題...... – Learning 2014-09-21 13:26:28

+0

你已經提到了一些非常重要的問題'請注意,編輯你的Web應用程序樹內的文件是一個壞主意' 。你能告訴我應該採取什麼方法來解決你提到的問題。這對其他用戶也有很大的幫助。我也會嘗試尋找最好的方法。但是從你身邊或參考文章的指針會很好。 – Learning 2014-09-22 03:39:44

+1

存儲他們*在別處*;任何文檔歸檔都可以這樣做 - 可以像在您的Web樹之外的文件樹一樣簡單,或者它可以是NAS/SAN上的共享,或者它可以是CDN,或者它可以是RDBMS或NOSQL商店。有很多選擇。 – 2014-09-22 09:07:21

1

我認爲問題是你沒有映射檢查路徑。

if (System.IO.File.Exists(Server.MapPath("../pdf/news/" + FileUploadControl.FileName))) 
{