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);
}
}
当您的深度未知时,使用递归不是一个好的做法。或者,您可以使用 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 和通配符(* 和 ?)字符(请参阅备注),但不支持正则表达式。默认模式为"*",返回所有文件。
搜索选项:
指定搜索操作>应仅包含当前目录还是所有子目录的枚举值之一