使用 C# 更改文件扩展名

Posted

技术标签:

【中文标题】使用 C# 更改文件扩展名【英文标题】:Change File Extension Using C# 【发布时间】:2011-07-12 17:03:29 【问题描述】:

我有许多文件类型:pdf、tiff、jpeg、bmp。等等。 我的问题是如何更改文件扩展名? 我试过这个:

my file= c:/my documents/my images/cars/a.jpg;
string extension = Path.GetExtension(myffile);
myfile.replace(extension,".Jpeg");

不管是什么类型的文件,我指定的格式都必须是文件名。但它不起作用。我从浏览器获取文件路径,如c:\..\..\a.jpg,文件格式为a.jpeg。所以,当我尝试删除它时,它给了我一个错误:Cannot find the file on specified path'。所以,我认为这与不匹配的文件扩展名有关。所以,我正在尝试将.jpg 转换为.jpeg 然后删除该文件。

【问题讨论】:

怎么不工作,(除了远不能编译)? 【参考方案1】:

有:Path.ChangeExtension 方法。例如:

var result = Path.ChangeExtension(myffile, ".jpg");

如果您还想物理更改扩展名,可以使用File.Move 方法:

File.Move(myffile, Path.ChangeExtension(myffile, ".jpg"));

【讨论】:

那么它会将扩展名更改为jpg吗?原始文件? @Alex 我没有移动文件,我从浏览器获取文件路径,如 c:\..\..\a.jpg,物理路径上的文件格式是 a.Jpeg,所以当我尝试删除它时,它给了我错误找不到指定路径上的文件。所以我认为这与文件扩展名不匹配有关。所以我正在尝试将 jpg 转换为 Jpeg 并删除该文件。 @safi:我怀疑将文件扩展名更改为例如大写将在磁盘上找到一个文件。您确定文件c:\..\..\a.jpg(在您的示例中)确实存在吗?如果是,也许您没有足够的权限来删除此文件?最后,如果您只想替换文件扩展名,请使用var newFilePath = Path.ChangeExtension(myffile, ".Jpg");newFilePath 将包含一个扩展名已更改的新文件名,物理上,文件名(在磁盘上)不会更改。 @safi:看,这个var newPath = Path.ChangeExtension("c:/my documents/my images/cars/a where a is a.jpg", string.Empty) 将从定义为第一个方法参数的路径中删除扩展名; newPath 字符串变量将在此操作后包含 c:/my documents/my images/cars/a where a is a. 值。 我们为许多事情创建了代码,但已经存在于 .NET fx 中。 File.Move & Path.ChangeExtension。凉爽的 ! :-)【参考方案2】:

您应该移动文件以重命名它。在您的示例代码中,您只更改字符串,而不是文件:

myfile= "c:/my documents/my images/cars/a.jpg";
string extension = Path.GetExtension(myffile); 
myfile.replace(extension,".Jpeg");

您只是在更改 myfile (这是一个字符串)。要移动实际文件,您应该这样做

FileInfo f = new FileInfo(myfile);
f.MoveTo(Path.ChangeExtension(myfile, ".Jpeg"));

见FileInfo.MoveTo

【讨论】:

我没有移动文件,我从浏览器获取文件路径,如 c:\..\..\a.jpg,物理路径上的文件格式是 a.Jpeg,所以当我尝试删除它,它给我错误找不到指定路径上的文件。所以我认为这与文件扩展名不匹配有关。所以我正在尝试将 jpg 转换为 Jpeg 然后删除文件 第一个代码不做任何替换。你需要做myfile=myfile.Replace(extension,".Jpeg");【参考方案3】:

试试这个。

filename = Path.ChangeExtension(".blah") 

在你的情况下:

myfile= c:/my documents/my images/cars/a.jpg;
string extension = Path.GetExtension(myffile);
filename = Path.ChangeExtension(myfile,".blah") 

你也应该看看这篇文章:

http://msdn.microsoft.com/en-us/library/system.io.path.changeextension.aspx

【讨论】:

【参考方案4】:

方法GetFileNameWithoutExtension,顾名思义,不返回文件的扩展名。在您的情况下,它只会返回“a”。您想将“.Jpeg”附加到该结果中。但是,在不同的层面上,这似乎很奇怪,因为图像文件具有不同的元数据并且不能那么容易地转换。

【讨论】:

【参考方案5】:

将文件格式转换为 png

string newfilename , 
 string filename = "~/Photo/"  + lbl_ImgPath.Text.ToString();/*get filename from specific path where we store image*/
 string newfilename = Path.ChangeExtension(filename, ".png");/*Convert file format from jpg to png*/

【讨论】:

以上是关于使用 C# 更改文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

获取文件类型不使用文件扩展名 c#

VB.NET如何更改保存程序的文件夹名?

在 python 中使用 argparse 更改文件扩展名

如何使用 Bash 的“查找”更改类型文件的扩展名? [复制]

在 Python 中更改文件扩展名

使用 shell 脚本更改文件的扩展名