如何在c#中递归获取文件路径?

如何在c#中递归获取文件路径?,c#,.net,C#,.net,我创建了下面的解决方案来返回所有文件路径,但它似乎只适用于一个文件夹。有什么建议我做错了什么吗 public static List<string> GetFilePaths(string dir) { var dirs = Directory.GetDirectories(dir); if (dirs.Count() > 0) { foreach (var pwd in dirs)

我创建了下面的解决方案来返回所有文件路径,但它似乎只适用于一个文件夹。有什么建议我做错了什么吗

    public static List<string> GetFilePaths(string dir)
    {
        var dirs = Directory.GetDirectories(dir);
        if (dirs.Count() > 0)
        {
            foreach (var pwd in dirs)
            {
                return GetFilePaths(pwd).ToList();
            }
        }

        return Directory.GetFiles(dir).ToList();
    }
publicstaticlist getfilepath(stringdir)
{
var dirs=Directory.GetDirectories(dir);
如果(dirs.Count()>0)
{
foreach(在目录中的var pwd)
{
返回getFilePath(pwd.ToList();
}
}
返回Directory.GetFiles(dir.ToList();
}

在循环的每次迭代之后,您都在使用
return
。这将导致函数在第一次迭代中返回,其余部分将变得无用。相反,在开始时声明一个
列表
,然后继续添加,最后返回它

public static List<string> GetFilePaths(string dir)
{
    var result = new List<string>;
    var dirs = Directory.GetDirectories(dir);
    if (dirs.Count() > 0)
    {
        foreach (var pwd in dirs)
        {
            result.AddRange(GetFilePaths(pwd));
        }
    }

    result.AddRange(GetFilePaths(dir));
    return result;
}
publicstaticlist getfilepath(stringdir)
{
var结果=新列表;
var dirs=Directory.GetDirectories(dir);
如果(dirs.Count()>0)
{
foreach(在目录中的var pwd)
{
AddRange(getFilePath(pwd));
}
}
AddRange(getFilePath(dir));
返回结果;
}

您将从循环的第一次迭代中返回。您应该将结果累积到某种变量中:

var filePaths = new List<string>();
foreach (var subDir in Directory.GetDirectories(dir))
{
    filePaths.AddRange(GetFilePaths(subDir);
}

您应该为每个文件夹填充列表

public static List<string> GetFilePaths(string dir)
{
    var dirs = Directory.GetDirectories(dir);
    var returnList = new List<string>();

    if (dirs.Count() > 0)
    {
        foreach (var pwd in dirs)
        {
            returnList.AddRange(GetFilePaths(pwd));
        }
    }

    returnList.AddRange(Directory.GetFiles(dir));
    return returnList;
}
publicstaticlist getfilepath(stringdir)
{
var dirs=Directory.GetDirectories(dir);
var returnList=新列表();
如果(dirs.Count()>0)
{
foreach(在目录中的var pwd)
{
AddRange(getFilePath(pwd));
}
}
returnList.AddRange(Directory.GetFiles(dir));
退货清单;
}

有没有不使用的理由?简单地
Directory.EnumerateFiles(路径“**”,SearchOptions.AllDirectories)
您是否知道GetDirectories和GetFiles都有重载,允许您搜索子文件夹,并使所有这些递归方法变得无用?
public static List<string> GetFilePaths(string dir)
{
    var dirs = Directory.GetDirectories(dir);
    var returnList = new List<string>();

    if (dirs.Count() > 0)
    {
        foreach (var pwd in dirs)
        {
            returnList.AddRange(GetFilePaths(pwd));
        }
    }

    returnList.AddRange(Directory.GetFiles(dir));
    return returnList;
}