c# 具有递归的堆栈溢出错误

本文关键字:堆栈 栈溢出 错误 递归 | 更新日期: 2023-09-27 17:56:17

我在服务器上做了一个完整的文件夹列表,但是大约有65,000个StackOverFlowException共享,有一个例外。 如何出行

static List<string> FolderList = new List<string>();
static void Selection(DirectoryInfo dir)
{
    FolderList.Add(dir.FullName);
    foreach (var a_dir in dir.GetDirectories())
    {
        Selection(a_dir);
    }
}

c# 具有递归的堆栈溢出错误

当您的深度未知时,使用递归不是一个好的做法。或者,您可以使用 GetDirectory 的重载(它使用堆栈数据结构而不是递归):

static List<string> FolderList = new List<string>();
static void Selection(DirectoryInfo dir)
{
    var dirs = dir.GetDirectories("*", SearchOption.AllDirectories);
    foreach (var a_dir in dirs)
    {
        FolderList.Add(dir.FullName);
    }
}

如果仍然遇到异常,则需要将逻辑更改为传统的 while 循环。

以下文档用于GetDirectories

搜索模式:

要与 的名称匹配的搜索字符串目录。此参数可以包含有效文本的组合path 和通配符(* 和 ?)字符(请参阅备注),但不支持正则表达式。默认模式为"*",返回所有文件。

搜索选项:

指定搜索操作>应仅包含当前目录还是所有子目录的枚举值之一