2013-03-06 69 views
1
string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/ProcessedFiles/" + fileName)); 

文件是從FileUpload1抓取保存在服務器上,當更改文件的擴展名是.xls文件(Excel中97-2003)如何在一個FileUpload選擇保存文件到服務器

我想要什麼在服務器上用.xlsx擴展名(Excel 2007及更高版本)保存。

回答

2

使用Path.ChangeExtension

string path = "C:\\SomePath\\Somefile.xls"; 
string newPath = Path.ChangeExtension(path, ".xlsx"); 

在你的情況,很可能是這樣的(未測試):

string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 
fileName = Server.MapPath(Path.Combine("~/ProcessedFiles/", fileName)); 
FileUpload1.PostedFile.SaveAs(Path.ChangeExtension(fileName, ".xlsx")); 
+0

這將文件保存爲2007 ++(.xlsx)格式但是會破壞文件。保存的文件既不能在c#中以編程方式讀取,也不能在Windows資源管理器中打開。我怎樣才能避免這個文件損壞? – StackTrace 2013-03-07 06:22:41

+0

那完全是另一個問題。你不能這麼做,因爲xls使用舊的Excel PIA,而xlsx使用ooxml。所以你不得不參考PIA程序集和OpenXML程序集(並創建你自己的轉換邏輯)或找到一些第三方解決方案。 – Matt 2013-03-07 13:19:35

0

您可以檢索文件名沒有原來的擴展名,然後使用Path.GetFileNameWithoutExtension(String path),像這樣添加一個新的擴展它:

String filename = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName) + ".xlsx"; 
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/ProcessedFiles/" + filename)); 

關於第二個想法,我完全忘了ChangeExtension(),如@馬特具有建議。你應該使用他的代碼。

+0

如果我使用此方法並嘗試打開文件,我得到錯誤Excel無法打開文件'FileN ameHere',因爲文件格式或文件擴展名無效。 – StackTrace 2013-03-06 13:39:31

+0

這段代碼中沒有錯誤,它與你試圖用'xlsx'擴展名打開'xls'文件有關。上面的代碼完成了它所說的內容。它改變了擴展名。要更改文件擴展名,請使用@ Matt的代碼。 – James 2013-03-06 13:42:23

0

您需要使用Path.GetFileNameWithoutExtension方法,而不是Path.GetFileName

string fileName = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName) + "xlsx"; 
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/ProcessedFiles/" + fileName)); 
相關問題