获取没有扩展名的文件名
获取某个文件夹中的文件名时:
DirectoryInfo di = new DirectoryInfo(currentDirName); FileInfo[] smFiles = di.GetFiles("*.txt"); foreach (FileInfo fi in smFiles) { builder.Append(fi.Name); builder.Append(", "); ... }
fi.Name
给我一个文件名,扩展名为: file1.txt
, file2.txt
, file3.txt
。
如何在没有扩展名的情况下获取文件名? ( file1
, file2
, file3
)
您可以使用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(); } }