gpt4 book ai didi

c# - 退出递归函数搜索子目录

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:59 25 4
gpt4 key购买 nike

我试图以递归方式获取给定目录中所有子目录的列表,因为现有命令显然不够好。我可以成功获取目录,但似乎无法离开递归算法。我敢肯定,一定有一种我没有看到的简单方法。任何帮助都会很棒!

public static public void directorySearch(ref List<DirectoryInfo> subs, ref DirectoryInfo dir, ref List<FileInfo> fileEntries, ref int k)
{
do
{
foreach (DirectoryInfo elements in dir.GetDirectories())
{
subs.Add(elements);
}
k++;
DirectoryInfo fi = subs[k];
directorySearch(ref subs, ref fi, ref fileEntries, ref k);
} while (??????);
//This will be used once function is working to get files in all directories
/*
foreach (FileInfo f in dir.GetFiles()
{
fileEntries.Add(f);
}*/
}

最佳答案

试试这个来获取目录:

public static IEnumerable<DirectoryInfo> DirectorySearch(DirectoryInfo dir)
{
return
dir
.GetDirectories()
.SelectMany(x => DirectorySearch(x))
.StartWith(dir);
}

然后您可以执行 DirectorySearch("C:\My\Path").SelectMany(x => x.GetFiles()) 来获取文件。


或者你可以使用这个:

public static IEnumerable<DirectoryInfo> DirectorySearch(DirectoryInfo dir)
{
yield return dir;
foreach (DirectoryInfo x in dir.GetDirectories())
foreach (DirectoryInfo y in DirectorySearch(x))
yield return y;
}

甚至这样:

public static List<DirectoryInfo> DirectorySearch(DirectoryInfo dir)
{
List<DirectoryInfo> subs = new List<DirectoryInfo>();
subs.Add(dir);
foreach (DirectoryInfo x in dir.GetDirectories())
{
foreach (DirectoryInfo y in DirectorySearch(x))
{
subs.Add(y);
}
}
return subs;
}

关于c# - 退出递归函数搜索子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com