C#でディレクトリ(フォルダー)の中にあるファイルの一覧を取得する方法について紹介します。
ディレクトリ内のファイルの一覧を取得するには、System.IO名前空間のDirectoryInfoクラスのGetFilesメソッドや、DirectoryクラスのGetFiles静的メソッドなどを使用します。
目次
DirectoryInfoクラスのGetFilesメソッドで取得
DirectoryInfoクラスのGetFilesメソッドの構文は次のようになります。
1 |
public System.IO.FileInfo[] GetFiles (); |
1 |
public System.IO.FileInfo[] GetFiles (string searchPattern); |
1 |
public System.IO.FileInfo[] GetFiles (string searchPattern, System.IO.SearchOption searchOption); |
引数を取らないGetFilesメソッドでは、DirectoryInfoオブジェクトのディレクトリ内のすべてのファイルを取得できます。
引数1つ(searchPattern)を取るGetFilesメソッドでは、検索するパターンを指定してファイルの一覧を取得できます。
検索するパターンにはリテラル文字とワイルドカード文字の「*」と「?」が指定できます。指定した位置に0個以上の文字列が含まれているかどうかを示す場合は「*」を、指定した位置に0個または1個の文字列が含まれているかどうかを示す場合は「?」を指定します。例えばファイル名が「あ」で始まり「ん」で終わるファイルを検索する場合は「あ*ん」を指定します。「a」と「b」の間に任意の1文字を含むファイル名であれば「a?b」と指定します。
引数2つ(searchPatternとsearchOption)を取るGetFilesメソッドでは、検索するパターンと検索対象をDirectoryInfoオブジェクトのディレクトリの直下のみにするか、すべてのサブディレクトリを含めるかを指定してファイルの一覧を取得できます。サブディレクトリを含めるかどうかはSystem.IO.SearchOption列挙型で指定します。System.IO.SearchOption列挙型には「TopDirectoryOnly」と「AllFiles」があり、「TopDirectoryOnly」を指定するとサブディレクトリを含まずファイルの一覧を取得し、「AllFiles」を指定するとすべてのサブディレクトリを検索対象として含んだ結果のファイルの一覧を返します。
DirectoryInfo.GetFilesメソッドの使用例
以下にGetFilesメソッドを使用してファイルの一覧を取得する例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// ディレクトリパス string path = @"C:\Test\ParentDir"; // DirectoryInfoのインスタンスを生成する DirectoryInfo di = new DirectoryInfo(path); // ディレクトリ直下のすべてのファイル一覧を取得する FileInfo[] fiAlls = di.GetFiles(); foreach (FileInfo f in fiAlls) { Console.WriteLine($"{f.FullName}"); } // ディレクトリ直下の「Help」という文字をファイル名に含むファイルの一覧を取得する FileInfo[] fiPatterns = di.GetFiles("*Help*"); foreach (FileInfo f in fiPatterns) { Console.WriteLine($"{f.FullName}"); } // ディレクトリ以下のすべてのサブディレクトリのファイルの一覧を取得する FileInfo[] fiOptions = di.GetFiles("*", SearchOption.AllDirectories); foreach (FileInfo f in fiOptions) { Console.WriteLine($"{f.FullName}"); } |
引数を2つ指定するGetFilesメソッドですべてのディレクトリを対象にする場合は、検索パターン(searchPattern)に「*」を指定します。
DirectoryクラスのGetFiles静的メソッドで取得
DirectoryクラスのGetFiles静的メソッドの構文は次のようになります。
1 |
public static string[] GetFiles (string path); |
1 |
public static string[] GetFiles (string path, string searchPattern); |
1 |
public static string[] GetFiles (string path, string searchPattern, System.IO.SearchOption searchOption); |
DirectoryクラスのGetFiles静的メソッドには検索対象とするディレクトリを第1引数に指定します。引数を2つ取るものと引数を3つ取るものは、DirectoryInfoクラスのGetFilesと同様に、検索パターンとすべてのサブディレクトリを含めるかどうかを指定します。
Directory.GetFiles静的メソッドの使用例
以下にGetFiles静的メソッドを使用してファイルの一覧を取得する例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ディレクトリパス string path = @"C:\Test\ParentDir"; // ディレクトリ直下のすべてのファイル一覧を取得する string[] fiAlls = Directory.GetFiles(path); foreach (string f in fiAlls) { Console.WriteLine($"{f}"); } // ディレクトリ直下の「Help」という文字をファイル名に含むファイルの一覧を取得する string[] fiPatterns = Directory.GetFiles(path, "*Help*"); foreach (string f in fiPatterns) { Console.WriteLine($"{f}"); } // ディレクトリ以下のすべてのサブディレクトリのファイルの一覧を取得する string[] fiOptions = Directory.GetFiles(path, "*", SearchOption.AllDirectories); foreach (string f in fiOptions) { Console.WriteLine($"{f}"); } |
DirectoryInfoクラスのGetFilesメソッドは戻り値にFileInfoの配列を返しますが、DirectoryクラスのGetFiles静的メソッドはファイルパスの配列(string[])を返します。
サンプルプログラム
Windowsフォームアプリケーションでのプログラムの実装例を記載します。
ユーザーインターフェース
フォームのインターフェースは次のようにします。
ソースコード
サンプルプログラムのフォームには次のようなソースコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
using System; using System.Windows.Forms; // System.IOのusingを追加 using System.IO; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // DirectoryInfoクラスのGetFilesメソッドでディレクトリ直下のすべてのファイルを取得 private void button1_Click(object sender, EventArgs e) { try { // ディレクトリパス string path = textBox1.Text; // DirectoryInfoのインスタンスを生成 DirectoryInfo di = new DirectoryInfo(path); // ファイルを取得 FileInfo[] files = di.GetFiles(); // リストボックスに表示 listBox1.Items.Clear(); foreach (FileInfo f in files) { listBox1.Items.Add(f.FullName); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // DirectoryInfoクラスのGetFilesメソッドで検索パターンを指定してディレクトリ直下のすべてのファイルを取得 private void button2_Click(object sender, EventArgs e) { try { // ディレクトリパス string path = textBox1.Text; // DirectoryInfoのインスタンスを生成 DirectoryInfo di = new DirectoryInfo(path); // 検索パターン string searchPattern = textBox2.Text; // ファイルを取得 FileInfo[] files = di.GetFiles(searchPattern); // リストボックスに表示 listBox1.Items.Clear(); foreach (FileInfo f in files) { listBox1.Items.Add(f.FullName); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // DirectoryInfoクラスのGetFilesメソッドで検索パターンと検索オプションを指定してファイルを取得 private void button3_Click(object sender, EventArgs e) { try { // ディレクトリパス string path = textBox1.Text; // DirectoryInfoのインスタンスを生成 DirectoryInfo di = new DirectoryInfo(path); // 検索パターン string searchPattern = textBox2.Text; // 検索オプション SearchOption searchOption = SearchOption.TopDirectoryOnly; if (radioButton2.Checked) { searchOption = SearchOption.AllDirectories; } // ファイルを取得 FileInfo[] files = di.GetFiles(searchPattern, searchOption); // リストボックスに表示 listBox1.Items.Clear(); foreach (FileInfo f in files) { listBox1.Items.Add(f.FullName); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // DirectoryクラスのGetFiles静的メソッドでディレクトリ直下のすべてのファイルを取得 private void button4_Click(object sender, EventArgs e) { try { // ディレクトリパス string path = textBox1.Text; // ファイルを取得 string[] files = Directory.GetFiles(path); // リストボックスに表示 listBox1.Items.Clear(); foreach (string f in files) { listBox1.Items.Add(f); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // DirectoryクラスのGetFiles静的メソッドで検索パターンを指定してディレクトリ直下のすべてのファイルを取得 private void button5_Click(object sender, EventArgs e) { try { // ディレクトリパス string path = textBox1.Text; // 検索パターン string searchPattern = textBox2.Text; // ファイルを取得 string[] files = Directory.GetFiles(path, searchPattern); // リストボックスに表示 listBox1.Items.Clear(); foreach (string f in files) { listBox1.Items.Add(f); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // DirectoryクラスのGetFiles静的メソッドで検索パターンと検索オプションを指定してファイルを取得 private void button6_Click(object sender, EventArgs e) { try { // ディレクトリパス string path = textBox1.Text; // 検索パターン string searchPattern = textBox2.Text; // 検索オプション SearchOption searchOption = SearchOption.TopDirectoryOnly; if (radioButton2.Checked) { searchOption = SearchOption.AllDirectories; } // ファイルを取得 string[] files = Directory.GetFiles(path, searchPattern, searchOption); // リストボックスに表示 listBox1.Items.Clear(); foreach (string f in files) { listBox1.Items.Add(f); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
サンプルの実行結果
上記のサンプルプログラムを実行すると、以下のように画面の条件に一致するファイルパスの一覧をリストボックスに表示します。
列挙可能なディレクトリ情報のコレクションを取得
列挙可能なファイル情報のコレクションを返すメソッドとして、DirectoryInfoクラスにはEnumerateFilesメソッドが、DirectoryクラスにはEnumerateFiles静的メソッドが用意されています。
DirectoryInfoクラスのEnumerateFilesメソッドはGetFilesメソッドと同様の引数が指定できまる。戻り値にはSystem.Collections.Generic.IEnumerable
DirectoryクラスにはEnumerateFiles静的メソッドもGetFiles静的メソッドと同様の引数が指定できます。戻り値にはSystem.Collections.Generic.IEnumerable
DirectoryInfo.EnumerateFilesメソッドの使用例
以下にEnumerateFilesメソッドを使用してファイルの一覧を取得する例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// ディレクトリパス string path = @"C:\Test\ParentDir"; // DirectoryInfoのインスタンスを生成する DirectoryInfo di = new DirectoryInfo(path); // ディレクトリ直下のすべてのファイルの一覧を取得する IEnumerable<FileInfo> fiAlls = di.EnumerateFiles(); foreach (FileInfo f in fiAlls) { Console.WriteLine(f.FullName); } // ディレクトリ直下の「Text」という文字をファイル名に含むファイルの一覧を取得する IEnumerable<FileInfo> fiPatterns = di.EnumerateFiles("*Text*"); foreach (FileInfo f in fiPatterns) { Console.WriteLine(f.FullName); } // ディレクトリ以下のすべてのサブディレクトリを含むファイルの一覧を取得する IEnumerable<FileInfo> fiOptions = di.EnumerateFiles("*", SearchOption.AllDirectories); foreach (FileInfo f in fiOptions) { Console.WriteLine(f.FullName); } |
Directory.EnumerateFiles静的メソッドの使用例
以下にEnumerateFiles静的メソッドを使用してファイルの一覧を取得する例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ディレクトリパス string path = @"C:\Test\ParentDir"; // ディレクトリ直下のすべてのファイルの一覧を取得する IEnumerable<string> allFiles = Directory.EnumerateFiles(path); foreach (string f in allFiles) { Console.WriteLine(f); } // ディレクトリ直下の「Text」という文字をファイル名に含むファイルの一覧を取得する IEnumerable<string> patternFiles = Directory.EnumerateFiles(path, "*Text*"); foreach (string f in patternFiles) { Console.WriteLine(f); } // ディレクトリ以下のすべてのサブディレクトリを含むファイルの一覧を取得する IEnumerable<string> optionFiles = Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories); foreach (string f in optionFiles) { Console.WriteLine(f); } |
GetFilesメソッドは、ファイル検索機能を持つアプリケーションの実装や、ファイル一覧リストビューの実装の際に役に立つメソッドです。
参考記事
ディレクトリ(フォルダー)の一覧を取得する方法については、以下の記事をご参照ください。