使用C#更改文件扩展名

132

我有很多文件类型: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。因此,当我尝试删除它时,会出现错误:找不到指定路径上的文件'。所以,我认为这与文件扩展名不匹配有关。因此,我正在尝试将.jpg转换为.jpeg,然后再删除该文件。

除了离编译远之外,它为什么不能工作呢? - Albin Sunnanbo
6个回答

290

这里有一个方法:Path.ChangeExtension。例如:

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

如果你还想物理上改变文件扩展名,可以使用File.Move方法:

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

它会将原始文件的扩展名更改为jpg吗? - safi
@Alex 我并不是在移动文件,我是从浏览器得到的文件路径,比如 c:....\a.jpg,而实际物理路径上的文件格式为 a.Jpeg,因此在尝试删除它时,会出现“找不到指定路径上的文件”的错误。所以我认为这可能与文件扩展名不匹配有关。所以我尝试将 jpg 转换为 Jpeg,然后再删除该文件。 - safi
3
@safi: 我怀疑将文件扩展名改为大写等操作无法在磁盘上找到文件。你确定在你的例子中 c:\..\..\a.jpg 文件确实存在吗?如果存在,可能是因为你没有足够的权限删除该文件。最后,如果你只想替换文件扩展名,请使用 var newFilePath = Path.ChangeExtension(myffile, ".Jpg");newFilePath 将包含新的带有更改扩展名的文件名,实际上,文件名(在磁盘上)不会被更改。 - Oleks
1
@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. 的值。 - Oleks
4
我们常常为许多事情编写代码,但是这些在.NET框架中已经存在,例如File.MovePath.ChangeExtension。太棒了! :-) - Legends
显示剩余2条评论

24

你应该移动文件来重命名它。在你的示例代码中,你只是改变了字符串,而没有改变文件:

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,然后再删除该文件。 - safi
第一段代码没有进行任何替换。你需要执行 myfile=myfile.Replace(extension,".Jpeg"); - KansaiRobot

12

4

正如其名,GetFileNameWithoutExtension 方法不会返回文件的扩展名。在您的情况下,它只会返回 "a"。您想要将".Jpeg"附加到该结果中。然而,在不同的层次上,这似乎有些奇怪,因为图像文件具有不同的元数据,不能轻易地转换。


1
将文件格式转换为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*/

0

替代使用 Path.ChangeExtension 的方法

string ChangeFileExtension(ReadOnlySpan<char> path, ReadOnlySpan<char> extension)
{
    var lastPeriod = path.LastIndexOf('.');
    return string.Concat(path[..lastPeriod], extension);
}

string myfile= @"C:/my documents/my images/cars/a.jpg";
string changedFileExtesion = ChangeFileExtension(myfile, ".jpeg");

Console.WriteLine(changedFileExtesion);
// output: C:/my documents/my images/cars/a.jpeg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接