Rich Hoffman
Rich Hoffman

Reputation: 762

Add file extension to extension-less file

I'm trying to add an extension to a file that is selected in an OpenFileDialog in my C# app. I'm having difficulty with files that don't already have an extension.

While I haven't tested the following method on files with an extension, I know that it doesn't work for files without an extension (which is really what I want to work with here).

string tPath = videoPath + videoName;
string tPath2 = Path.ChangeExtension(tPath, ".yuv");

tPath2 will reflect to header change, but it seems not to affect the file itself, only the string returned by the ChangeExtension method. I'd just go ahead and copy the file into a new one with the appropriate name and extension, but we're talking about huge, uncompressed HD video files. Is there a way to utilize tPath2 with a File or FileInfo object that I'm missing?

I appreciate any assistance that anyone can give me here. Thanks.

Upvotes: 18

Views: 30028

Answers (4)

Andrew Barber
Andrew Barber

Reputation: 40150

To carry out your rename without having to make a copy, add this line at the end:

System.IO.File.Move(tPath, tPath2);

(File.Move(src, dst) does the same thing that FileInfo.MoveTo(dst) does)

For your problem of files without an extension, try this:

if(string.IsNullOrEmpty(Path.GetExtension(tPath)){
  tPath += ".yuv";
}

Upvotes: 5

You're just changing the file name so why don't you just do "mypath" + ".ext"?

There's nothing about the file extension change that needs to change the contents of the file, it just tells the OS what to do with it.

Upvotes: 4

Reed Copsey
Reed Copsey

Reputation: 564433

You need to actually call FileInfo.MoveTo to rename the file. A file rename, on the same physical drive, is usually a fast operation, so it doesn't really matter that the file is huge.

Upvotes: 3

Adam Robinson
Adam Robinson

Reputation: 185643

The Path class just allows you to perform manipulations on a file path (meaning the string) at a high level, not a file itself.

You'll need to use File.Move in order to rename a file (including just adding an extension).

string tPath = videoPath + videoName;
string tPath2 = Path.ChangeExtension(tPath, ".yuv");

File.Move(tPath, tPath2); //effectively changes the extension

Upvotes: 16

Related Questions