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

时间:2013-05-17 11:58:20

标签: c#

我正在尝试通过将子目录记入帐户来列出给定目录下的所有文件。我正在使用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);                
       }
}

我不知道这里出了什么问题,但它只返回一个文件(根目录下的文件,并且只有一个文件)。你能帮忙吗?

1 个答案:

答案 0 :(得分:12)

你需要产生递归搜索的结果,否则你只是抛弃它的结果:

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;
    }
}

请注意,如果 intent 只是获取每个文件的平面列表,请考虑使用Directory.GetFiles而不是搜索所有子目录的选项。如果您的目的是利用LINQ(或其他方法)来应用搜索条件或对检索到的文件总数的限制,那么这是一个不错的方式,因为您将一次读取一个目录并在“已经达到了你的标准。