C# 如何在将选定文件保存到文件上载到服务器时更改文件扩展名

C# 如何在将选定文件保存到文件上载到服务器时更改文件扩展名,c#,winforms,file-upload,C#,Winforms,File Upload,从FileUpload1抓取并保存在服务器上的文件是一个.xls文件(Excel 97-2003) 我想用.xlsx扩展名(Excel 2007及更高版本)将其保存在服务器上。您可以在不使用原始扩展名的情况下检索文件名,然后使用以下方法向其附加新扩展名: string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Proce

从FileUpload1抓取并保存在服务器上的文件是一个.xls文件(Excel 97-2003)


我想用.xlsx扩展名(Excel 2007及更高版本)将其保存在服务器上。

您可以在不使用原始扩展名的情况下检索文件名,然后使用以下方法向其附加新扩展名:

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

仔细想想,我完全忘记了@Matt建议的
ChangeExtension()
。您应该使用他的代码。

使用
Path.ChangeExtension

String filename = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName) + ".xlsx";
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/ProcessedFiles/" + filename));
在您的情况下,可能是这样(未经测试):

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

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

如果使用此方法并尝试打开文件,则会出现错误Excel无法打开文件“FileNameHere”,因为文件格式或文件扩展名无效。这不是此代码中的错误,这与您试图打开扩展名为
xlsx
xls
文件有关。上面的代码执行它所述的操作;它更改了扩展名。为了更好地替代更改文件扩展名,请使用@Matt的代码。这将以2007++(.xlsx)格式保存文件,但会损坏文件。保存的文件既不能在c#中以编程方式读取,也不能从windows资源管理器中打开。如何避免文件损坏?这是另一个问题。因为xls使用的是旧的Excel PIA,而xlsx使用的是ooxml,所以这样做并不容易。因此,您必须同时引用PIA程序集和OpenXML程序集(并创建自己的转换逻辑),或者找到一些第三方解决方案。
string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
fileName = Server.MapPath(Path.Combine("~/ProcessedFiles/", fileName));
FileUpload1.PostedFile.SaveAs(Path.ChangeExtension(fileName, ".xlsx"));
string fileName = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName) + "xlsx";
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/ProcessedFiles/" + fileName));