获取没有扩展名的文件名

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

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获取它(或者至少我看不到它)。

使用Path.GetFileNameWithoutExtension()

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

 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 returnValue = new List(); for (int i = 0; i < fi.Length; i++) { returnValue.Add(Path.GetFileNameWithoutExtension(fi[i].FullName)); } return returnValue.ToArray(); } } } 

编辑:我也认为如果使用LINQ来实现数组的构造,这个方法可能会被简化或者很棒,但是我没有LINQ的经验来快速完成这种样本。

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

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

这将仅返回没有扩展名类型的文件名。 您也可以更改它,以便同时获得名称和文件类型

  Path.GetFileName(FileName); 

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

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(".")) 

仅供记录:

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

这样您就不会使用StringBuilder而是使用String.Join() 。 另请注意, Path.GetFileNameWithoutExtension()需要一个完整路径( fi.FullName ),而不是我在其他一个答案中看到的fi.Name

 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(); } }