如何在 C# 中递归获取文件路径? [复制]

Posted

技术标签:

【中文标题】如何在 C# 中递归获取文件路径? [复制]【英文标题】:How to get filepaths recursively in c#? [duplicate] 【发布时间】:2016-04-06 01:30:40 【问题描述】:

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

    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();
    

【问题讨论】:

有什么理由不使用Directory.EnumerateFiles?只需Directory.EnumerateFiles(path, "*.*", SearchOptions.AllDirectories) 您是否知道 GetDirectories 以及 GetFiles 具有允许您搜索子文件夹并使所有这些递归方法无用的重载? 【参考方案1】:

您在每次循环迭代后使用return。这将导致函数在第一次迭代中返回,其余部分将变得无用。而是在开头声明一个List,然后继续添加它,最后返回它。

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;

【讨论】:

【参考方案2】:

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

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

    filePaths.AddRange(GetFilePaths(subDir);

或使用 LINQ:

var filePaths = Directory.GetDirectories(dir).SelectMany(s => GetFilePaths(s));

【讨论】:

【参考方案3】:

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

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;

【讨论】:

以上是关于如何在 C# 中递归获取文件路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

windows下C#读文件遇到一个路径的天坑

Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]

如何在终端中使用 inotify-tools 获取递归目录路径

如何用递归获取一个文件夹内的所有文件存放在一个文件数组中

C# 中是不是存在一种方法来获取给定两个绝对路径输入的相对路径? [复制]

如何在 Azure Function C# 中获取文件夹的路径