我正在使用一個FileUpload
控件並且有一個關於SaveAs method
的問題。如果上傳的文件存在,我知道它會覆蓋它,但如果文件名與文件名不同,它會使用現有文件名還是新文件名。C#FileUpload SaveAs外殼
例如
,如果我有一個服務器和一個名爲 test.txt的新上傳名爲test.txt文件進來,這名會用嗎?
我正在使用一個FileUpload
控件並且有一個關於SaveAs method
的問題。如果上傳的文件存在,我知道它會覆蓋它,但如果文件名與文件名不同,它會使用現有文件名還是新文件名。C#FileUpload SaveAs外殼
例如
,如果我有一個服務器和一個名爲 test.txt的新上傳名爲test.txt文件進來,這名會用嗎?
答案取決於操作系統的行爲。
對於Windows操作系統,該文件將被覆蓋。從本質上講,就Windows而言,文件名不區分大小寫,至少爲了識別它們。 Windows也將使用新的文件名(如果被覆蓋)(自己嘗試 - 將文件複製到一個文件夾中,看看會發生什麼),儘管舊版本的操作系統使用原始文件名(XP是這樣做的)。
在Linux操作系統上將創建一個新文件。 Linux/Unix/iOS(以及幾乎所有的Unix變體)都將不同文件的文件視爲不同的文件。
這是一個Windows服務器,我知道它會被覆蓋,但不知道它是否會保留原始文件或新文件的外殼。 – 2013-05-10 14:04:15
@katastraphi - 如果您沒有特別刪除它,原件將被覆蓋,儘管舊版本會保留原件。 – Oded 2013-05-10 14:05:08
太棒了,謝謝Oded!將標記爲答案。 – 2013-05-10 14:05:57
也許這並不是完全回答這個問題,但我認爲這樣會更安全一些,不會對替換後將使用哪個文件名做出任何假設。
因此,我建議您只保存小寫的上傳文件,這樣如果您切換服務器(操作系統),您將覆蓋您的背部,這將爲您節省一些調試。
儘管我同意我們應該保持一致,但首席開發人員希望能夠判斷用戶是否更新了文檔。當它們最初創建它時,它將全部大寫,然後編輯將它移動到小寫。當他們上傳時,他們被掃描,然後移動到不同的文件夾。如果它們在被掃描之前編輯,我們需要知道將使用哪個文件名。 – 2013-05-10 14:19:23
我想你們看着這個錯誤的方式,但這只是我的看法。對於您在上述評論中描述的用例,我會在每次上傳時創建文件內容的散列(最近md5速度很快),如果第二個(或任何後面的情況下存在多個更新)散列不同於第一個(如果存在多個更新,則最後一個),您將知道文件已更改。 – Paul 2013-05-10 14:22:45
不幸的是,對於系統設置的方式,如果不進行很多更改,這將無法正常工作。我沒有辦法把它設置好,所以我只是想確保客戶想要的是什麼。 – 2013-05-10 14:29:24
'套管'是什麼意思.. – Rahul 2013-05-10 14:02:03
@Rahul - 大寫/小寫。 – Oded 2013-05-10 14:02:16
是的,抱歉的混亂! – 2013-05-10 14:04:43