ディレクトリ一覧を拾得する+(その直下ディレクトリも含めて)

//対象ディレクトリURL
string directory_url_B = textBox2.Text.ToString();

//ディレクトリ配列のスペース数算出
//指定ディレクトリに含まれるディレクトリの数
int path_cnt = 0;
//一時変数
int path_cnt2 = 0;
//各ディレクトリに含まれるディレクトリの数
int path_cnt3 = 0;
//指定ディレクトリのファイルパスをループ毎に拾得する。全ての拾得でループ終了
foreach (string directory_path_1 in Directory.GetDirectories(directory_url_B))
{
	//指定ディレクトリの下位ディレクトリ一覧を拾得する
	path_cnt2 = Directory.GetDirectories(directory_path_1).Length;
	if (path_cnt2 > path_cnt3)
	{
		path_cnt3 = path_cnt2;
	}
	//ディレクトリ数加算
	path_cnt++;
}
//ここまで

//算出した最大数での二次元配列の宣言
string[,] directory_array =new string[path_cnt,path_cnt3+1];
//一次元回転指数
int cntA = 0;
//二次元回転指数
int cntB = 0;
//指定ディレクトリに含まれるディレクトリのパスを拾得
foreach (string directory_path_3 in Directory.GetDirectories(directory_url_B.ToString()))
{
	//先頭次元にディレクトリパスを格納
	directory_array[cntA, 0] = directory_path_3;
	cntB = 1;
	//拾得ディレクトリにに含まれるディレクトリ分のループ
	foreach (string directory_path_4 in Directory.GetDirectories(directory_path_3))
	{
		//以下に含まれるディレクトリパスを格納
		directory_array[cntA, cntB] = directory_path_4;
		//二次元指標の加算
		cntB++;
	}
	//一次元指標の加算
	cntA++;
}

一次下のディレクトリしか格納できない
更に下まで(要はディレクトリに含まれる全て)の拾得はクラス使用したり再帰使用したりする必要が有るかな…