使用枚举查找文件夹中的所有文件
本文关键字:文件 文件夹 枚举 查找 | 更新日期: 2023-09-27 18:14:18
我试图通过考虑子目录列出给定目录下的所有文件。我正在使用yield,这样我就可以把它与我调用的Take结合起来(注意,我使用的是。net 3.5)。
下面是我的代码:IEnumerable<string> Search(string sDir)
{
foreach (var file in Directory.GetFiles(sDir))
{
yield return file;
}
foreach (var directory in Directory.GetDirectories(sDir))
{
Search(directory);
}
}
我不知道这里出了什么问题,但它只返回一个文件(这是根目录下的一个,那里也只有一个)。你能帮帮我吗?
您需要生成递归搜索的结果,否则您只是将其结果丢弃:
IEnumerable<string> Search(string sDir)
{
foreach (var file in Directory.GetFiles(sDir))
{
yield return file;
}
foreach (var directory in Directory.GetDirectories(sDir))
{
foreach(var file in Search(directory))
yield return file;
}
}
请注意,如果您的意图只是简单地获取每个文件的平面列表,请考虑使用Directory。使用搜索所有子目录的选项来代替GetFiles。如果您的目的是利用LINQ(或其他方法)来应用搜索条件或限制检索的文件总数,那么这是一种不错的方法,因为您将一次读取一个目录,并在满足条件后停止。