フォルダ内のファイル(絶対パス)を一覧取得するには、Directory.EnumerateFiles()を使用します。
引数としてSearchOption列挙型を指定できます。
- SearchOption.AllDirectoriesを指定すると、サブフォルダも含めた範囲
- SearchOption.TopDirectoryOnlyを指定すると、フォルダ直下のみが範囲(デフォルト)
例
以下はワイルドカード(*)を使用して「指定したフォルダパス(path)内のサブディレクトリを含めた(searchOption)、abcから始まるテキストファイル(abc*.txt)を一覧で取得する」処理を行うコードです。
// フォルダパス
var path = "D:\\勉強\\wpf\\FindFileProgect\\FindFileProgect\\Root";
// 検索パターン
var searchPattern = "abc*.txt";
// 検索範囲(サブフォルダまで含める
var searchOption = SearchOption.AllDirectories;
var resultFiles = Directory.EnumerateFiles(path, searchPattern, searchOption);
Console.WriteLine(string.Join("\n", resultFiles ));
D:\勉強\wpf\FindFileProgect\FindFileProgect\Root\abc_01.txt
D:\勉強\wpf\FindFileProgect\FindFileProgect\Root\abc_02.txt
D:\勉強\wpf\FindFileProgect\FindFileProgect\Root\Sub01\abc_01.txt
D:\勉強\wpf\FindFileProgect\FindFileProgect\Root\Sub01\abc_02.txt
D:\勉強\wpf\FindFileProgect\FindFileProgect\Root\Sub02\abc_01.txt
D:\勉強\wpf\FindFileProgect\FindFileProgect\Root\Sub02\abc_02.txt
■フォルダ構成
D:.
│ abc_01.txt
│ abc_02.txt
│ abc_03.json
│ xyz.txt
│
├─Sub01
│ abc_01.txt
│ abc_02.txt
│ abc_03.json
│ xyz.txt
│
└─Sub02
abc_01.txt
abc_02.txt
abc_03.json
xyz.txt
おまけ
ファイル名だけ取得したい場合
Directory.EnumerateFiles()を使用すると、ファイルの「絶対パス(完全パス)」のリストとして取得されます。
パスではなくファイル名(○○.txt)のみ取得したい場合は、Path.GetFileName(filePath)を使います。
※LINQの「Select」メソッドを使用して、fiiles(ファイルパスのリスト)の各要素(ファイルパス)に対してPath.GetFileName()を使ってファイル名を抽出しています。
files = Directory.EnumerateFiles(path, searchPattern, searchOption);
// Path.GetFileName()でファイル名取得
var fileNames = files.Select(x => Path.GetFileName(x));
Console.WriteLine(string.Join("\n", fileNames));
abc_01.txt
abc_02.txt
abc_01.txt
abc_02.txt
abc_01.txt
abc_02.txt
ただこのままだとファイル名が重複してしまう問題があるので、Distinct()を使ってリストから重複を削除すると良いかもです。
files = Directory.EnumerateFiles(path, searchPattern, searchOption);
// Path.GetFileName()でファイル名取得
var fileNames = files.Select(x => Path.GetFileName(x));
// Distinct()で重複削除
fileNames = fileNames.Distinct();
Console.WriteLine(string.Join("\n", fileNames));
abc_01.txt
abc_02.txt
公式リファレンス
■Directory.EnumerateFiles メソッド
コメント