使用枚举查找文件夹中的所有文件

本文关键字:文件 文件夹 枚举 查找 | 更新日期: 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(或其他方法)来应用搜索条件或限制检索的文件总数,那么这是一种不错的方法,因为您将一次读取一个目录,并在满足条件后停止。