Remove file extension from a file name string

If I have a string saying "abc.txt", is there a quick way to get a substring that is just "abc"?

I can't do an fileName.IndexOf('.') because the file name could be "abc.123.txt" or something and I obviously just want to get rid of the extension (i.e. "abc.123").

0

13 Answers

The Path.GetFileNameWithoutExtension method gives you the filename you pass as an argument without the extension, as should be obvious from the name.

4

There's a method in the framework for this purpose, which will keep the full path except for the extension.

System.IO.Path.ChangeExtension(path, null); 

If only file name is needed, use

System.IO.Path.GetFileNameWithoutExtension(path); 
5

You can use

string extension = System.IO.Path.GetExtension(filename); 

And then remove the extension manually:

string result = filename.Substring(0, filename.Length - extension.Length); 
2

String.LastIndexOf would work.

string fileName= "abc.123.txt"; int fileExtPos = fileName.LastIndexOf("."); if (fileExtPos >= 0 ) fileName= fileName.Substring(0, fileExtPos); 
3

I used the below, less code

string fileName = "C:\file.docx"; MessageBox.Show(Path.Combine(Path.GetDirectoryName(fileName),Path.GetFileNameWithoutExtension(fileName))); 

Output will be

C:\file

2

If you want to create full path without extension you can do something like this:

Path.Combine( Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath)) 

but I'm looking for simpler way to do that. Does anyone have any idea?

You maybe not asking the UWP api. But in UWP, file.DisplayName is the name without extensions. Hope useful for others.

if you want to use String operation then you can use the function lastIndexOf( ) which Searches for the last occurrence of a character or substring. Java has numerous string functions.

0

I know it's an old question and Path.GetFileNameWithoutExtensionis a better and maybe cleaner option. But personally I've added this two methods to my project and wanted to share them. This requires C# 8.0 due to it using ranges and indices.

public static string RemoveExtension(this string file) => ReplaceExtension(file, null); public static string ReplaceExtension(this string file, string extension) { var split = file.Split('.'); if (string.IsNullOrEmpty(extension)) return string.Join(".", split[..^1]); split[^1] = extension; return string.Join(".", split); } 
ReadOnlySpan<char> filename = "abc.def.ghi.txt"; var fileNameWithoutExtension = RemoveFileExtension(filename); //abc.def.ghi string RemoveFileExtension(ReadOnlySpan<char> path) { var lastPeriod = path.LastIndexOf('.'); return (lastPeriod < 0 ? path : path[..lastPeriod]).ToString(); } 
 /// <summary> /// Get the extension from the given filename /// </summary> /// <param name="fileName">the given filename ie:abc.123.txt</param> /// <returns>the extension ie:txt</returns> public static string GetFileExtension(this string fileName) { string ext = string.Empty; int fileExtPos = fileName.LastIndexOf(".", StringComparison.Ordinal); if (fileExtPos >= 0) ext = fileName.Substring(fileExtPos, fileName.Length - fileExtPos); return ext; } 
2
 private void btnfilebrowse_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); //dlg.ShowDialog(); dlg.Filter = "CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml"; if (dlg.ShowDialog() == DialogResult.OK) { string fileName; fileName = dlg.FileName; string filecopy; filecopy = dlg.FileName; filecopy = Path.GetFileName(filecopy); string strFilename; strFilename = filecopy; strFilename = strFilename.Substring(0, strFilename.LastIndexOf('.')); //fileName = Path.GetFileName(fileName); txtfilepath.Text = strFilename; string filedest = System.IO.Path.GetFullPath(".\\Excels_Read\\'"+txtfilepath.Text+"'.csv"); // filedest = "C:\\Users\\adm\\Documents\\Visual Studio 2010\\Projects\\ConvertFile\\ConvertFile\\Excels_Read"; FileInfo file = new FileInfo(fileName); file.CopyTo(filedest); // File.Copy(fileName, filedest,true); MessageBox.Show("Import Done!!!"); } } 
3

This implementation should work.

string file = "abc.txt"; string fileNoExtension = file.Replace(".txt", ""); 
1

You Might Also Like