获取某个文件夹中的文件名时:
DirectoryInfo di = new DirectoryInfo(currentDirName);
FileInfo[] smFiles = di.GetFiles("*.txt");
foreach (FileInfo fi in smFiles)
{
builder.Append(fi.Name);
builder.Append(", ");
...
}
Run Code Online (Sandbox Code Playgroud)
fi.Name让我与它的扩展名的文件名:file1.txt,file2.txt,file3.txt.
如何在没有扩展名的情况下获取文件名?(file1,file2,file3)
Rup*_*Rup 456
你可以使用Path.GetFileNameWithoutExtension:
foreach (FileInfo fi in smFiles)
{
builder.Append(Path.GetFileNameWithoutExtension(fi.Name));
builder.Append(", ");
}
Run Code Online (Sandbox Code Playgroud)
虽然我很惊讶没有办法直接从FileInfo(或至少我看不到它)得到这个.
Ern*_*rno 21
此解决方案还可以防止添加尾随逗号.
var filenames = String.Join(
", ",
Directory.GetFiles(@"c:\", "*.txt")
.Select(filename =>
Path.GetFileNameWithoutExtension(filename)));
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种情况的DirectoryInfo,FileInfo.
DirectoryInfo和FileInfo收集有关文件夹和文件的更多数据,因此它们需要的时间和内存更多.
小智 8
Path.GetFileNameWithoutExtension(file);
Run Code Online (Sandbox Code Playgroud)
这仅返回文件名而没有扩展名类型。您也可以更改它,以便同时获得名称和文件类型
Path.GetFileName(FileName);
Run Code Online (Sandbox Code Playgroud)
来源:https : //msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx
作为一个额外的答案(或复合现有答案),您可以编写一个扩展方法来在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>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我也认为如果使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
FileInfo 知道它自己的扩展名,所以你可以删除它
fileInfo.Name.Replace(fileInfo.Extension, "");
fileInfo.FullName.Replace(fileInfo.Extension, "");
Run Code Online (Sandbox Code Playgroud)
或者如果您偏执它可能会出现在中间,或者想要进行微优化:
file.Name.Substring(0, file.Name.Length - file.Extension.Length)
Run Code Online (Sandbox Code Playgroud)
如果文件名包含目录并且您不需要丢失目录:
fileName.Remove(fileName.LastIndexOf("."))
Run Code Online (Sandbox Code Playgroud)