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.txt
, file2.txt
, file3.txt
的文件名
如何获得没有文件扩展名file1
, file2
, file3
文件名?
您可以使用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(); } }