ディレクトリ内にあるディレクトリとファイルを一括で取得する [C#]

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

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

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

GetFileSystemInfosメソッドは引数を指定せずに呼び出すと、DirectoryInfoオブジェクトのディレクトリ内のすべてのディレクトリおよびファイルの一覧を返します。

引数のsearchPatternのみを指定すると、取得するディレクトリとファイルの名前の検索パターン文字列を指定できます。
検索パターンにはリテラル文字とワイルドカード文字の「*」と「?」が指定できます。検索パターンに「*」を含めると指定した位置に0個または1個の文字列が含まれているかどうかを条件に、ディレクトリおよびファイルの一覧を取得できます。検索パターンに「?」を含めると指定した位置に0個または1個の文字列が含まれているかどうかを条件に、ディレクトリおよびファイルの一覧を取得できます。
例えばファイル名が「begin」で始まり「end」で終わる名前のディレクトリとファイルを対象にするなら検索パターン文字列を「begin*end」とします。「abc」と「efg」の間に任意の1文字を含む名前のディレクトリとファイルが対象であれば「abc?efg」という文字列を指定します。

引数のsearchPatternとsearchOptionを指定すると、名前の検索パターンと、検索対象のディレクトリとしてすべてのサブディレクトリを含めるかどうかを指定できます。
サブディレクトリを含めるかどうかはSystem.IO.SearchOption列挙型で指定します。System.IO.SearchOption列挙型には「AllFiles」と「TopDirectoryOnly」があり、「AllFiles」を指定するとすべてのサブディレクトリを対象に含んで一覧を取得し、「TopDirectoryOnly」を指定するとサブディレクトリを含まずに一覧を取得して返します。

DirectoryInfo.GetFileSystemInfosメソッドの使用例

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

上記の例で、引数を2つ指定するGetFileSystemInfosメソッドで第1引数の検索パターンに「*」を指定しているのは、すべてのディレクトリを対象にするためです。

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

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

DirectoryクラスのGetFileSystemEntries静的メソッドには検索対象とするディレクトリを第1引数に指定します。引数を2つ取るものと引数を3つ取るものは、DirectoryInfoクラスのGetFileSystemEntriesと同様に、検索パターンとすべてのサブディレクトリを含めるかどうかを指定します。

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

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

DirectoryInfoクラスのGetFileSystemFilesメソッドは戻り値にFileSystemInfoの配列を返しますが、DirectoryクラスのGetFileSystemEntries静的メソッドはファイルパスの文字列の配列(string[])を返します。

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

列挙可能なファイル情報のコレクションを返すメソッドとして、DirectoryInfoクラスにはEnumerateFileSystemInfosメソッドが、DirectoryクラスにはEnumerateFileSystemEntries静的メソッドが用意されています。
DirectoryInfoクラスのEnumerateFileSystemInfosメソッドはGetFileSystemInfosメソッドと同様の引数が指定できまる。戻り値にはSystem.Collections.Generic.IEnumerable型のオブジェクトのコレクションを返します。
DirectoryクラスにはEnumerateFileSystemEntries静的メソッドもGetFiles静的メソッドと同様の引数が指定できます。戻り値にはSystem.Collections.Generic.IEnumerable型のオブジェクトのコレクションを返しますを返します。

DirectoryInfo.EnumerateFileSystemInfosメソッドの使用例

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

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

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

サンプルプログラム

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

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

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

ファイルシステム(ディレクトリおよびファイル)一覧取得サンプルフォームデザイン

ソースコード

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

サンプルの実行結果

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

ファイルシステム(ディレクトリおよびファイル)一覧取得結果

今回ご紹介したメソッドは、ディレクトリとファイルを一括して処理したい場合に重宝するメソッドです。

参考記事

ディレクトリ(フォルダー)の一覧を取得する方法については、以下の記事をご参照ください。

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

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

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