Переполнение стека при рекурсии - C#
Формулировка задачи:
Есть такая задача: составить полный список всех папок на сервере.
Делаю такВсе хорошо, но примерно на 65000 папке возникает исключение 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); } }
Решение задачи: «Переполнение стека при рекурсии»
textual
Листинг программы
static List<string> FolderList = new List<string>(); internal static void Selection(DirectoryInfo dir) { var stack = new Stack<DirectoryInfo>(); stack.Push(dir); while (stack.Count > 0) { dir = stack.Pop(); FolderList.Add(dir.FullName); Console.WriteLine(dir.FullName); Console.Title = stack.Count.ToString(); try { foreach (var a_dir in dir.GetDirectories()) { Console.Title = stack.Count.ToString(); stack.Push(a_dir); } } catch (Exception) { } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д