我已经创建了下面的解决方案来返回所有文件路径,但它似乎只适用于一个文件夹。有什么建议我做错了吗?
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();
}
答案 0 :(得分:2)
在循环的每次迭代后使用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;
}
答案 1 :(得分:0)
你在第一次迭代中从循环返回。您应该将结果累积在某种变量中:
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));
答案 2 :(得分:0)
您应该为每个文件夹填充列表。
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;
}