[英]I want to convert my function to a function without recursion in C#
[英]I want to get folders without recursion
我想在沒有遞歸的情況下獲取文件夾並將其打印到標准輸出。 我有使用遞歸的代碼。
static void Main(string[] args) {
WriteDirectories(@"C:\Intel");
Console.ReadKey();
}
static void WriteDirectories(string path) {
string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
for(int i = 0; i < dirs.Length; i++) {
Console.WriteLine(dirs[i]);
WriteDirectories(dirs[i]);
}
}
有人可以幫助我在不使用遞歸的情況下獲取文件夾嗎?
在這段代碼中,我得到了 testfolder 中的所有文件夾。 在 testfolder3 是一個文件夾,我無法得到它。
static void WriteDirectories(string path)
{
string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
for (int i = 0; i < dirs.Length; i++)
{
Console.WriteLine(dirs[i]);
for (int j = 0; j < dirs[i].Length; j++)
{
break;
string[] dirs1 = Directory.GetDirectories(dirs[i]);
Console.WriteLine(" " + dirs1[j]);
}
}
}
如果您想在不使用遞歸函數的情況下獲取所有子目錄,您可以使用 Stack 來維護需要搜索的項目:
static void WriteDirectoriesInternal(Stack<string> stack)
{
while (stack.Count > 0)
{
var currDir = stack.Pop();
Console.WriteLine(currDir);
foreach (var item in Directory.GetDirectories(currDir))
stack.Push(item);
}
}
static void WriteDirectories(string path)
{
Stack<string> directoryStack = new Stack<string>();
directoryStack.Push(path);
WriteDirectoriesInternal(directoryStack);
}
public static void Main(String[] args)
{
WriteDirectories("D:\\Program Files (x86)");
Console.ReadLine();
}
您在 for 循環中遞歸調用WriteDirectories
。
您需要刪除行WriteDirectores(dirs[i]);
.
您可以在此MSDN 文章中找到解決方案
訣竅是使用 SearchOption.AllDirectories 枚舉值作為最后一個參數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.