如何在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;
}