如何在 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# 中递归获取文件路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]
如何在终端中使用 inotify-tools 获取递归目录路径