ディレクトリ内にあるディレクトリの一覧を取得する [C#]

C#でディレクトリ(フォルダー)の中にあるディレクトリの一覧を取得する方法について紹介します。
ディレクトリ内のディレクトリの一覧を取得するには、System.IO名前空間のDirectoryInfoクラスのGetDirectoriesメソッドや、DirectoryクラスのGetDirectories静的メソッドなどを使用します。

DirectoryInfoクラスのGetDirectoriesメソッドで取得

DirectoryInfoクラスのGetDirectoriesメソッドの構文は次のようになります。

引数を取らないGetDirectoriesメソッドでは、DirectoryInfoオブジェクトのディレクトリ内のすべてのディレクトリを取得できます。

引数1つ(searchPattern)を取るGetDirectoriesメソッドでは、検索するパターンを指定してディレクトリの一覧を取得できます。
検索するパターンは文字列で指定します。文字列にはリテラル文字とワイルドカード文字が指定できます。ワイルドカード文字には「*」と「?」が使用でき、「*」は指定した位置に0個以上の文字列が含まれているかどうかを示し、「?」は指定した位置に0個または1個の文字列が含まれているかどうかを示します。例えばディレクトリ名が「abc」で始まり「xyz」で終わるディレクトリを検索する場合は「abc*xyz」を指定します。

引数2つ(searchPatternとsearchOption)を取るGetDirectoriesメソッドでは、検索するパターンと検索対象をDirectoryInfoオブジェクトのディレクトリの直下のみにするか、すべてのサブディレクトリを含めるかを指定してディレクトリの一覧を取得できます。ディレクトリの直下のみにするか、すべてのサブディレクトリを含めるかはSystem.IO.SearchOption列挙型で指定します。System.IO.SearchOption列挙型には「TopDirectoryOnly」と「AllDirectories」があり、「TopDirectoryOnly」を指定すると対象のディレクトリの直下のみになり、「AllDirectories」を指定するとすべてのサブディレクトリを含みます。

DirectoryInfo.GetDirectoriesメソッドの使用例

以下にGetDirectoriesメソッドを使用してディレクトリの一覧を取得する例を示します。

引数を2つ指定するGetDirectoriesメソッドですべてのディレクトリを対象にする場合は、検索パターン(searchPattern)に「*」を指定します。

DirectoryクラスのGetDirectories静的メソッドで取得

DirectoryクラスのGetDirectories静的メソッドの構文は次のようになります。

DirectoryクラスのGetDirectories静的メソッドには、検索対象とするディレクトリのパスを第1引数に指定します。引数を2つ取るもの、引数を3つ取るものは、DirectoryInfoクラスのGetDirectoriesと同様です。

Directory.GetDirectories静的メソッドの使用例

以下にGetDirectories静的メソッドを使用してディレクトリの一覧を取得する例を示します。

DirectoryInfoクラスのGetDirectoriesメソッドは戻り値にDirectoryInfoの配列を返しますが、DirectoryクラスのGetDirectories静的メソッドはディレクトリのパスの配列(string[])を返します。

サンプルプログラム

Windowsフォームアプリケーションでのプログラムの実装例を記載します。

ユーザーインターフェース

フォームのインターフェースは次のようにします。

ディレクトリ取得サンプルフォームデザイン

ソースコード

サンプルプログラムのフォームには次のようなソースコードを記述します。

サンプルの実行結果

上記のサンプルプログラムを実行すると、以下のように画面の条件に一致するディレクトリの一覧をリストボックスに表示します。

ディレクトリ取得結果

列挙可能なディレクトリ情報のコレクションを取得

列挙可能なディレクトリ情報のコレクションを返すメソッドとして、DirectoryInfoクラスにはEnumerateDirectoriesメソッドが、DirectoryクラスにはEnumerateDirectories静的メソッドが用意されています。
DirectoryInfoクラスのEnumerateDirectoriesメソッドはGetDirectoriesメソッドと同様の引数が指定でき、戻り値にSystem.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>型のオブジェクトのコレクションを返します。
DirectoryクラスにはEnumerateDirectories静的メソッドもGetDirectories静的メソッドと同様の引数が指定でき、戻り値にSystem.Collections.Generic.IEnumerable<string>型のオブジェクトのコレクションを返します。

DirectoryInfo.EnumerateDirectoriesメソッドの使用例

以下にEnumerateDirectoriesメソッドを使用してディレクトリの一覧を取得する例を示します。

Directory.EnumerateDirectories静的メソッドの使用例

以下にEnumerateDirectories静的メソッドを使用してディレクトリの一覧を取得する例を示します。

GetDirectoriesメソッドは、ディレクトリのツリービューなどを作成する場合に大活躍するメソッドですので、覚えておいて損はないと思います。

参考記事

ファイルの一覧を取得する方法については、以下の記事をご参照ください。

ディレクトリ内にあるファイルの一覧を取得する [C#]
C#でディレクトリ(フォルダー)の中にあるファイルの一覧を取得する方法について紹介します。 ディレクトリ内のファイルの一覧を取得するには、...