Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 打印出每个子目录而不使用递归,而是使用循环_C#_For Loop_Recursion_Directory - Fatal编程技术网

C# 打印出每个子目录而不使用递归,而是使用循环

C# 打印出每个子目录而不使用递归,而是使用循环,c#,for-loop,recursion,directory,C#,For Loop,Recursion,Directory,我的任务是打印出每个子目录,而不使用递归。我必须使用两个函数,一个是用每个子目录填充数组,然后打印这个数组,另一个是调整数组大小。我知道这是一个糟糕的做法,每次我想添加一些东西时,我都必须调整数组的大小,但这是我应该做的。另外,我不允许使用获取目录和SearchOption.AllDirectories的父目录的函数。它必须使用循环来完成 class Program { static void Main(string[] args) { string path = @"

我的任务是打印出每个子目录,而不使用递归。我必须使用两个函数,一个是用每个子目录填充数组,然后打印这个数组,另一个是调整数组大小。我知道这是一个糟糕的做法,每次我想添加一些东西时,我都必须调整数组的大小,但这是我应该做的。另外,我不允许使用获取目录和SearchOption.AllDirectories的父目录的函数。它必须使用循环来完成

class Program {

    static void Main(string[] args) {
        string path = @"D:\Heaven Benchmark 4.0";
        WriteDirectories(path);
        Console.ReadKey();
    }

    static void WriteDirectories(string path) {
        string[] dirs = Directory.GetDirectories(path);
        string[] allDirs = new string[0];

        for (int i = 0; i < allDirs.Length; i++) {
            Console.WriteLine(allDirs[i]); 
        }
    }

    static void ResizeArray(ref string[] arr, int newSize) {
        string[] newArr = new string[newSize];
        for (int i = 0; i < newSize - 1; i++) {
            newArr[i] = arr[i];
        }
        arr = newArr;
    }
}
类程序{
静态void Main(字符串[]参数){
字符串路径=@“D:\4.0”;
写目录(路径);
Console.ReadKey();
}
静态void WriteDirectories(字符串路径){
字符串[]dirs=Directory.GetDirectories(路径);
字符串[]allDirs=新字符串[0];
for(int i=0;i

我正在考虑用路径的每个现有子目录填充数组allDirs,然后将其打印出来。有什么更好更简单的方法吗?

假设您拥有对所有子目录的读取权限:

替换

string[] dirs = Directory.GetDirectories(path);


如果使用递归对您来说非常直观,那么就去实现它。将基于递归的算法转换为迭代版本非常容易,如所述

在这篇文章的顶部回答之后,你会发现自己实现了如下内容:

static void WriteDirectories(string path)
{
    string[] dirs = Directory.GetDirectories(path);
    var allDirs = new List<string>();
    Stack<string> stack = new Stack<string>(dirs);
    while (stack.Any())
    {
        var dir = stack.Pop();
        allDirs.Add(dir);
        foreach (var tmp in Directory.GetDirectories(dir))
        {
            stack.Push(tmp);
        }
    }
    // Do something with allDirs
}
静态void WriteDirectories(字符串路径)
{
字符串[]dirs=Directory.GetDirectories(路径);
var allDirs=新列表();
堆栈=新堆栈(dirs);
while(stack.Any())
{
var dir=stack.Pop();
所有目录添加(目录);
foreach(目录中的var tmp.GetDirectories(dir))
{
堆栈推送(tmp);
}
}
//用allDirs做点什么
}

我忘了提到我也不允许使用它。只需要使用循环就可以了sprint输出每个子目录而不使用递归和使用循环输出每个子目录是不同的要求/问题
static void WriteDirectories(string path)
{
    string[] dirs = Directory.GetDirectories(path);
    var allDirs = new List<string>();
    Stack<string> stack = new Stack<string>(dirs);
    while (stack.Any())
    {
        var dir = stack.Pop();
        allDirs.Add(dir);
        foreach (var tmp in Directory.GetDirectories(dir))
        {
            stack.Push(tmp);
        }
    }
    // Do something with allDirs
}