C#获取没有扩展名的文件名

在某个文件夹中获取文件名时:

DirectoryInfo di = new DirectoryInfo(currentDirName); FileInfo[] smFiles = di.GetFiles("*.txt"); foreach (FileInfo fi in smFiles) { builder.Append(fi.Name); builder.Append(", "); ... } 

通过fi.Name我们得到一个扩展名为file1.txtfile2.txtfile3.txt的文件名

如何获得没有文件扩展名file1file2file3文件名?

您可以使用Path.GetFileNameWithoutExtension

 foreach (FileInfo fi in smFiles) { builder.Append(Path.GetFileNameWithoutExtension(fi.Name)); builder.Append(", "); } 

虽然我很惊讶,但没有办法从FileInfo直接获取(至less我看不到它)。

使用Path.GetFileNameWithoutExtension()

此解决scheme还可以防止添加尾随逗号。

 var filenames = String.Join( ", ", Directory.GetFiles(@"c:\", "*.txt") .Select(filename => Path.GetFileNameWithoutExtension(filename))); 

我不喜欢这种情况下的DirectoryInfo,FileInfo。

DirectoryInfo和FileInfo收集有关文件夹和文件的数据比需要更多的数据,所以他们需要更多的时间和内存。

使用Path.GetFileNameWithoutExtension 。 path在System.IO名称空间中。

作为一个额外的答案(或复合现有的答案),你可以编写一个扩展方法来为你在DirectoryInfo类中完成这个。 下面是我写得相当快的一个例子,可以修改目录名称或其他修改标准等。

 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace DocumentDistributor.Library { public static class myExtensions { public static string[] GetFileNamesWithoutFileExtensions(this DirectoryInfo di) { FileInfo[] fi = di.GetFiles(); List<string> returnValue = new List<string>(); for (int i = 0; i < fi.Length; i++) { returnValue.Add(Path.GetFileNameWithoutExtension(fi[i].FullName)); } return returnValue.ToArray<string>(); } } } 

编辑:我也认为这种方法可能可以简化或真棒,如果它使用LINQ来实现数组的构造,但我没有在LINQ足够快的速度做这种样本的经验。

编辑2(几乎4年后):这是我将使用的LINQ-ified方法:

 public static class myExtensions { public static IEnumerable<string> GetFileNamesWithoutExtensions(this DirectoryInfo di) { return di.GetFiles() .Select(x => Path.GetFileNameWithoutExtension(x.FullName)); } } 

FileInfo知道自己的扩展名,所以你可以删除它

 fileInfo.Name.Replace(fileInfo.Extension, ""); fileInfo.FullName.Replace(fileInfo.Extension, ""); 

或者如果你是偏执的,它可能会出现在中间,或想要微观优化:

 file.Name.Substring(0, file.Name.Length - file.Extension.Length) 

如果文件名包含目录,你不需要丢失目录:

 fileName.Remove(fileName.LastIndexOf(".")) 

只是为了logging:

DirectoryInfo di = new DirectoryInfo(currentDirName); FileInfo[] smFiles = di.GetFiles("*.txt"); string fileNames = String.Join(", ", smFiles.Select<FileInfo, string>(fi => Path.GetFileNameWithoutExtension(fi.FullName)));

这样你不使用StringBuilder而是String.Join() 。 另外请注意, Path.GetFileNameWithoutExtension()需要一个完整path( fi.FullName ),而不是我在其中一个答案fi.Name

 Path.GetFileNameWithoutExtension(file); 

这仅返回文件名称,不包含扩展名。 您也可以更改它,以便同时获得名称和文件types

  Path.GetFileName(FileName); 

来源: https : //msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx

 using System; using System.IO; public class GetwithoutExtension { public static void Main() { //D:Dir dhould exists in ur system DirectoryInfo dir1 = new DirectoryInfo(@"D:Dir"); FileInfo [] files = dir1.GetFiles("*xls", SearchOption.AllDirectories); foreach (FileInfo f in files) { string filename = f.Name.ToString(); filename= filename.Replace(".xls", ""); Console.WriteLine(filename); } Console.ReadKey(); } }