129

I have many file types: pdf, tiff, jpeg, bmp. etc. My question is how can I change file extension? I tried this:

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

No matter what type of file it is, the format I specify must be with the file name. But it does not work. I get file path from browser like c:\..\..\a.jpg, and the file format is a.jpeg. So, when I try to delete it, it gives me an error: Cannot find the file on specified path'. So, I am thinking it has something to do with the file extension that does not match. So, I am trying to convert .jpg to .jpeg and delete the file then.

Nikolai Samteladze
  • 7,699
  • 6
  • 44
  • 70
safi
  • 3,636
  • 8
  • 24
  • 37

6 Answers6

285

There is: Path.ChangeExtension method. E.g.:

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

In the case if you also want to physically change the extension, you could use File.Move method:

File.Move(myffile, Path.ChangeExtension(myffile, ".jpg"));
Oleks
  • 31,955
  • 11
  • 77
  • 132
  • so will it change the extension to jpg? of original file? – safi Mar 10 '11 at 13:12
  • @Alex I am not moving a file, i get file path from broswer like c:\..\..\a.jpg, and the file format on physical path is a.Jpeg, so when i try to delete it, it gives me error cannot find the file on specified path. so i am thinking it has some to do with the file extension is not matching. so i am trying to convert jpg to Jpeg and delete the file then. – safi Mar 10 '11 at 13:26
  • 3
    @safi: I doubt that changing file extension to e.g. uppercase will locate a file on the disk. Are you sure the file `c:\..\..\a.jpg` (in your example) is really exists? If yes, maybe you don't have enough priviledges to delete this file? And finally, if you just want to replace file extension use `var newFilePath = Path.ChangeExtension(myffile, ".Jpg");`; the `newFilePath` will contain a new file name with changed extension, physically, the file name (on disk) won't be changed. – Oleks Mar 10 '11 at 13:41
  • @Alex, I tried and it didnt worked for me, so can we do like this.. c:/my documents/my images/cars/a where a is a.jpg? mean to say removing extension....not from just file name including the whole path. – safi Mar 10 '11 at 14:37
  • 1
    @safi: see, this `var newPath = Path.ChangeExtension("c:/my documents/my images/cars/a where a is a.jpg", string.Empty)` will remove the extension from the path defined as the first method parameter; the `newPath` string variable will contain `c:/my documents/my images/cars/a where a is a.` value after this operation. – Oleks Mar 10 '11 at 14:50
  • 4
    There are so many things we do create code for, but already exists in the .NET fx. `File.Move` & `Path.ChangeExtension`. Cool ! :-) – Legends Dec 23 '16 at 12:06
  • Coming from google, this is exactly what I needed. But now that I see the context, did anyone actually figure out what OP was attempting? – Christopher May 02 '23 at 16:28
23

You should do a move of the file to rename it. In your example code you are only changing the string, not the file:

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

you are only changing myfile (which is a string). To move the actual file, you should do

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

See FileInfo.MoveTo

ThiefMaster
  • 310,957
  • 84
  • 592
  • 636
Michiel Overeem
  • 3,894
  • 2
  • 27
  • 39
  • I am not moving a file, i get file path from broswer like c:\..\..\a.jpg, and the file format on physical path is a.Jpeg, so when i try to delete it, it gives me error cannot find the file on specified path. so i am thinking it has some to do with the file extension is not matching. so i am trying to convert jpg to Jpeg and delete the file then – safi Mar 10 '11 at 13:30
  • The first code does not do any replacing. You need to do `myfile=myfile.Replace(extension,".Jpeg");` – KansaiRobot Aug 20 '18 at 06:00
12

try this.

filename = Path.ChangeExtension(".blah") 

in you Case:

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

You should look this post too:

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

ThiefMaster
  • 310,957
  • 84
  • 592
  • 636
JAiro
  • 5,914
  • 2
  • 22
  • 21
4

The method GetFileNameWithoutExtension, as the name implies, does not return the extension on the file. In your case, it would only return "a". You want to append your ".Jpeg" to that result. However, at a different level, this seems strange, as image files have different metadata and cannot be converted so easily.

d219
  • 2,707
  • 5
  • 31
  • 36
skaz
  • 21,962
  • 20
  • 69
  • 98
1

Convert file format to 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*/
Code
  • 679
  • 5
  • 9
0

Alternative to using 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
Ibrahim Timimi
  • 2,656
  • 5
  • 19
  • 31