Reputation: 22926
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"
).
Upvotes: 292
Views: 362948
Reputation: 186
I used the below, less code
string fileName = "C:\file.docx";
Path.Combine(Path.GetDirectoryName(fileName),
Path.GetFileNameWithoutExtension(fileName));
Output will be
C:\file
Upvotes: 17
Reputation: 3700
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();
}
Upvotes: 0
Reputation: 482
I know it's an old question and Path.GetFileNameWithoutExtension
is 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);
}
Upvotes: 0
Reputation: 119
You maybe not asking the UWP api.
But in UWP, file.DisplayName
is the name without extensions. Hope useful for others.
Upvotes: 4
Reputation: 506
This implementation should work.
string file = "abc.txt";
string fileNoExtension = file.Replace(".txt", "");
Upvotes: -7
Reputation: 19
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!!!");
}
}
Upvotes: -7
Reputation: 3776
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);
Upvotes: 350
Reputation: 2335
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.
Upvotes: 1
Reputation: 4189
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?
Upvotes: 16
Reputation: 43
/// <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;
}
Upvotes: -3
Reputation: 234424
The Path.GetFileNameWithoutExtension
method gives you the filename you pass as an argument without the extension, as should be obvious from the name.
Upvotes: 497
Reputation: 2157
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);
Upvotes: 60
Reputation: 419
String.LastIndexOf would work.
string fileName= "abc.123.txt";
int fileExtPos = fileName.LastIndexOf(".");
if (fileExtPos >= 0 )
fileName= fileName.Substring(0, fileExtPos);
Upvotes: 33