5

我正在尝试通过考虑子目录来列出给定目录下的所有文件。我正在使用产量,以便我可以将它与我称之为的地方结合起来(注意我使用的是.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);                
       }
}

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

4

1 回答 1

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

请注意,如果您的意图是简单地获取每个文件的平面列表,请考虑使用Directory.GetFiles代替搜索所有子目录的选项。如果您的意图是利用 LINQ(或其他方法)来应用搜索条件或限制检索到的文件总数,那么这是一种不错的方法,因为您将一次读取一个目录,一旦您就停止我符合你的标准。

于 2013-05-17T12:00:55.283 回答