Answers:
您可以使用Path.GetFileNameWithoutExtension
:
foreach (FileInfo fi in smFiles)
{
builder.Append(Path.GetFileNameWithoutExtension(fi.Name));
builder.Append(", ");
}
尽管令我感到惊讶的是,没有一种方法可以直接从FileInfo
(或至少我看不到)得到它。
builder
将是StringBuilder
OP代码中的实例。这只是GetFileNameWithoutExtension的示例用法-您可能会更好地编写自己的调用它的代码。
GetFileNameWithoutExtension
仅删除末尾扩展名。例如,文件example.es6.js
名将变为example.es6
此解决方案还可以防止添加尾随逗号。
var filenames = String.Join(
", ",
Directory.GetFiles(@"c:\", "*.txt")
.Select(filename =>
Path.GetFileNameWithoutExtension(filename)));
对于这种情况,我不喜欢DirectoryInfo,FileInfo。
DirectoryInfo和FileInfo收集比所需更多的有关文件夹和文件的数据,因此它们花费了更多的时间和内存。
Directory.GetFiles
过DirectoryInfo.GetFiles
ANYDAY,如果我要的是文件名。
Path.GetFileNameWithoutExtension(file);
这仅返回文件名而没有扩展名类型。您也可以更改它,以便同时获取文件的名称和类型
Path.GetFileName(FileName);
来源:https : //msdn.microsoft.com/zh-cn/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>();
}
}
}
编辑:我还认为,如果使用LINQ来实现数组的构造,则该方法可能会简化或改进,但是我没有LINQ的经验,无法足够快地完成这种样本。
编辑2(将近4年后):这是我将使用的LINQ验证方法:
public static class myExtensions
{
public static IEnumerable<string> GetFileNamesWithoutExtensions(this DirectoryInfo di)
{
return di.GetFiles()
.Select(x => Path.GetFileNameWithoutExtension(x.FullName));
}
}
仅作记录:
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()
需要完整的路径(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();
}
}