TheDeveloperBlog.com


C# Path.ChangeExtension

Path.ChangeExtension modifies a path string. It can, for example, change a file ending in a ".txt" extension to end in the "" extension. This makes it unnecessary to write custom string methods.

Note: Use ChangeExtension with string arguments such as ".txt". You can use null to remove the entire extension.


Example. First, we use the Path.ChangeExtension static method from the System.IO namespace to change the extension of a path string in the program's memory. The Path class does not actually access the disk or persist the change.

Static Method

Instead, it changes the path string's memory representation and returns a reference to the new string data. After you receive the results of Path.ChangeExtension, you must write the new file to disk or move the old one.

C# program that changes path extension

using System.IO;

class Program
{
    static void Main()
    {
	// The file name.
	string path = "test.txt";

	// Make sure the file exists.
	File.WriteAllText(path, "Tutorial file");

	// Change the path name to have a new extension in memory.
	string changed = Path.ChangeExtension(path, "");

	// Create file with the new extension name.
	File.WriteAllText(changed, "Changed file");
    }
}

Result
    Output directory will contain two files.

test.txt
test

The program invokes File.WriteAllText to write to the disk based on the path. The Path.ChangeExtension method usage shows how to change the extension of a path to have an "" extension instead of a ".txt" extension.

Info: You must specify the leading period, not just three letters, on the extension string.


Remove extension. Next, you can remove the extension entirely by providing the null literal as the second argument to ChangeExtension. Because the Path class has no RemoveExtension method, providing null is the clearest way to remove the extension.

Tip: If you pass an empty string "" to ChangeExtension, the period is not removed.

C# program that removes extensions

using System;
using System.IO;

class Program
{
    static void Main()
    {
	string original = "file.txt";
	Console.WriteLine(Path.ChangeExtension(original, ""));
	Console.WriteLine(Path.ChangeExtension(original, null));
    }
}

Output

file.
file

Note: Thanks to Pierre-Luc Gélinas for writing in with a bug report on this section.


Summary. We used the Path.ChangeExtension method in a C# program. This method receives two parameters, the first being the path string you want to change, and the second being the new extension including the leading period.

Review: The method will throw various exceptions on invalid inputs. You may want to protect your program against these conditions.