我需要从文件夹中获取第一个文件名。我怎样才能在C#中获得这个?
以下代码返回所有文件名:
DirectoryInfo di = new DirectoryInfo(imgfolderPath);
foreach (FileInfo fi in di.GetFiles())
{
if (fi.Name != "." && fi.Name != ".." && fi.Name != "Thumbs.db")
{
string fileName = fi.Name;
string fullFileName = fileName.Substring(0, fileName.Length - 4);
MessageBox.Show(fullFileName);
}
}
我需要第一个文件名。
答案 0 :(得分:27)
有几种方法可以做到这一点:
您可以在处理完第一个文件后添加break
语句。这将退出foreach循环。
DirectoryInfo.GetFiles
返回一个数组,以便您可以将其分配给变量并扫描元素,直到找到合适的元素。
或者,如果您使用的是.NET 3.5,则可以使用谓词查看FirstOrDefault
方法。
以下是一些代码:
string firstFileName =
di.GetFiles()
.Select(fi => fi.Name)
.FirstOrDefault(name => name != "Thumbs.db");
答案 1 :(得分:6)
如果你使用的是.Net 4.0,你应该这样做......
var firstFileName = di.EnumerateFiles()
.Select(f => f.Name)
.FirstOrDefault();
... .GetFiles()
创建一个数组,因此必须扫描所有文件。 .EnumerateFiles()
将返回IEnumerable<FileInfo>
,因此无需做太多工作。您可能不会注意到具有少量文件的本地硬盘驱动器的差异。但是网络共享,拇指驱动器/存储卡或大量文件会使这一点显而易见。
答案 2 :(得分:4)
FileInfo fi = di.GetFiles()[0];
注意:
答案 3 :(得分:1)
using System.IO;
using System.Linq;
var firstFile = Path.GetFileName(Directory.GetFiles(@"c:\dir", "*.*")
.FirstOrDefault(f => !String.Equals(
Path.GetFileName(f),
"Thumbs.db",
StringComparison.InvariantCultureIgnoreCase)));
答案 4 :(得分:1)
回复riad对我的评论:
除了abatischchev的解决方案:
var file = Directory.GetFiles(@"C:\TestFolder", "*.*")
.FirstOrDefault(f => f != @"C:\TestFolder\Text1.txt");
我会添加此内容以获取名称:
Console.WriteLine(file.Substring(file.LastIndexOf('\\') + 1));
生成输出Text2.txt
(我在该文件夹中有三个文本切片,名为Text1.txt,Text2.txt和text3.txt。