Ваш вопрос немного двусмысленный, поэтому я не совсем уверен, с какой проблемой вы хотите помочь, но я думаю, что вижу, чего вы пытаетесь достичь - пробежаться по дереву папок и вывести список всех папок.?
Если это так, то лучший способ сделать это - использовать рекурсивную функцию - вызывать сам вызов функции до тех пор, пока он не достигнет нижней части дерева, добавив его в список следующим образом:
class Program
{
static void Main(string[] args)
{
var list = new List<string>();
SubSubFolders(@"C:\Program Files\Microsoft Office", list);
Console.WriteLine(list.Aggregate((s1,s2)=>s1+Environment.NewLine+s2));
Console.WriteLine("Press enter...");
Console.ReadLine();
}
public static void SubSubFolders(string basePath, List<string> folders)
{
//if (folders.Count > 500) return;
string[] dirs = new string[] { };
try
{
dirs = Directory.GetDirectories(basePath);
}
catch(Exception exc)
{
// Handle access failures - there will be folders you can't enumerate unless running as admin
}
for (int i = 0; i < dirs.Length; i++)
{
folders.Add(dirs[i]);
SubSubFolders(dirs[i], folders);
}
}
}
Обратите внимание, что это займет много времени, если вы попытаетесь перечислить все каталоги на среднем компьютере - скажем, из c: \.Для этого вам понадобится серьезная оптимизация и, возможно, вам потребуется перейти на язык более низкого уровня, если вы хотите действительно хорошую производительность.
Обратите внимание также на то, что вы не можете легко добавить массив - его размер устанавливается в то времяоно создано.