(1) C#でフォルダ内のファイルの一覧を取得する方法
(1-1) 方法①構文
(1-2) 方法①サンプルプログラム
(1-3) 方法②構文
(1-4) 方法②サンプルプログラム
(1) C#でフォルダ内のファイルの一覧を取得する方法
(1-1) 方法①構文
①通常一致で抽出
DirectoryクラスのGetFilesメソッドで指定フォルダのファイル一覧をstring配列として受け取ります。その各要素に対して「foreach」でアクセスします。
(構文)
string[] [配列名] = Directory.GetFiles(@"[フォルダパス]"); foreach (string [ループ変数名] in [配列名]) { //何かの処理 //(例)↓ファイル名をコンソール出力 Console.WriteLine(name); }
②部分一致で抽出
指定パターンで与えた文字列と部分一致するファイル名を抽出します。指定にはワイルドカード(*など)が使えますが、正規表現は使えません。
(構文)
string[] [配列名] = Directory.GetFiles(@"[フォルダパス]","[指定パターン]");
(1-2) 方法①サンプルプログラム
上記「①通常一致」と「②部分一致」の構文を用いたサンプルPGをご紹介します。
前半では指定した[フォルダパス]内にあるファイル一覧をstring[]型で受取り、各要素をforeachでループしています。後半では2つ目の引数を与えて「*.txt」に部分一致するファイルを洗い出してます。
(サンプルプログラム①)
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileListCheck { class Program { static void Main(string[] args) { //(1)フォルダ配下のファイル一覧の取得(ディレクトリは除く) Console.WriteLine("### (1) List all files ###"); string[] array1 = Directory.GetFiles(@"C:\Temp2\IT0207\"); foreach (string name in array1) { Console.WriteLine(name); } //(2)フォルダ配下の特定の拡張子のファイルを取得 Console.WriteLine("### (2) List files having .txt extention ###"); string[] array2 = Directory.GetFiles(@"C:\Temp2\IT0207\", "*.txt"); foreach (string name in array2) { Console.WriteLine(name); } } } }
(図121)実行結果
部分一致の方はちゃんと1件のみヒットしています。
(1-3) 方法②構文
2つ目の方法は「Directory.EnumerateFiles」を使います。EnumerateFilesを使用する事で、配列全体が返却される前に配列を順次取得する事ができます。
これがGetFilesの場合、配列全体が返却されるまでは配列にアクセスができないため、その点ではEnumerateFilesの方が優れています。そのため、非常に多くのディレクトリやファイルを対象にして処理を行う場合に活躍します。
(構文)Directory.EnumerateFilesでファイル一覧を取得
foreach (string [ループ変数名] in Directory.EnumerateFiles(@"[フォルダパス]")) { // 各ファイルに対して行う処理(例:コンソールにファイルパス出力) Console.WriteLine([ループ変数名]); }
更に、引数に「SearchOption.AllDirectories」を与える事で、フォルダ配下の子フォルダも含めて再帰的にリストアップさせる事ができます。
(構文)Directory.EnumerateFilesで再帰的にファイル一覧を取得
foreach (string [ループ変数名] in Directory.EnumerateFiles(@"[フォルダパス]","*.*",SearchOption.AllDirectories)) { Console.WriteLine(@"C\Temp\ : " + file); }
(1-4) 方法②サンプルプログラム
(サンプルプログラム)
前半がEnumerateFilesの基本例で、後半が引数にSearchOption.AllDirectoriesを指定して再帰的に探索しています。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileListCheck { class Program { static void Main(string[] args) { // (3)指定したディレクトリ配下を全てループ Console.WriteLine("### (3) Loop through the given directories ###"); foreach (string path in Directory.EnumerateFiles(@"C:\Temp2\IT0207\")) { Console.WriteLine(path); } // (4)指定フォルダの配下のファイルを再帰的にループして取得 Console.WriteLine("### (4) Get the file name recursively for the given path ###"); foreach (string file in Directory.EnumerateFiles(@"C:\Temp2\IT0207\", "*.*",SearchOption.AllDirectories)) { Console.WriteLine(file); } } } }
(図141)実行結果