フォルダ以下のファイルを最下層まで検索または取得する
スポンサーリンク
フォルダ内のすべてのファイルを取得する で紹介した System.IO.Directory クラスの GetFiles メソッドは、ディレクトリ内のファイルはすべて取得できますが、サブディレクトリ内のファイルまでは検索しません。サブディレクトリ内のファイルまで対象にするには、再帰呼び出しを使って再帰的に検索する必要があります。この方法を用いれば、あるパターンに合致したファイルを検索したり、あるパターンに合致したファイルをすべて取得可能です。
以下は、その処理を関数化したものです。ファイルの検索をやめて、ディレクトリを列挙するように変更することで、ディレクトリの検索も可能です。
サンプルコード
以下にサンプルコードを示します。
C# 全般
/// --------------------------------------------------------------------------------------- /// <summary> /// 指定した検索パターンに一致するファイルを最下層まで検索しすべて返します。</summary> /// <param name="stRootPath"> /// 検索を開始する最上層のディレクトリへのパス。</param> /// <param name="stPattern"> /// パス内のファイル名と対応させる検索文字列。</param> /// <returns> /// 検索パターンに一致したすべてのファイルパス。</returns> /// --------------------------------------------------------------------------------------- public static string[] GetFilesMostDeep(string stRootPath, string stPattern) { System.Collections.Specialized.StringCollection hStringCollection = ( new System.Collections.Specialized.StringCollection() ); // このディレクトリ内のすべてのファイルを検索する foreach (string stFilePath in System.IO.Directory.GetFiles(stRootPath, stPattern)) { hStringCollection.Add(stFilePath); } // このディレクトリ内のすべてのサブディレクトリを検索する (再帰) foreach (string stDirPath in System.IO.Directory.GetDirectories(stRootPath)) { string[] stFilePathes = GetFilesMostDeep(stDirPath, stPattern); // 条件に合致したファイルがあった場合は、ArrayList に加える if (stFilePathes != null) { hStringCollection.AddRange(stFilePathes); } } // StringCollection を 1 次元の String 配列にして返す string[] stReturns = new string[hStringCollection.Count]; hStringCollection.CopyTo(stReturns, 0); return stReturns; }
使用例は以下のようになります。
C# 全般
// ファイル名に「Hoge」を含み、拡張子が「.txt」のファイルを最下層まで検索し取得する string[] stFilePathes = GetFilesMostDeep(@"C:\Hoge\", "*Hoge*.txt"); string stPrompt = string.Empty; // 取得したファイル名を列挙する foreach (string stFilePath in stFilePathes) { stPrompt += stFilePath + System.Environment.NewLine; } // 取得したすべてのファイルパスを表示する if (stPrompt != string.Empty) { MessageBox.Show(stPrompt); }
関連するリファレンス
準備中です。