«前の日記(2010年09月28日) 最新 次の日記(2010年10月17日)» 編集

日々をアレコレ


2010年10月11日

.NETでディレクトリ内のファイル抽出

.NETでディレクトリ内のファイル一覧を取得するのに、System.IO.Directory.GetFiles()だと抽出条件を一つしか指定できない。秀丸のGrepのように複数条件を指定するには、抽出条件なしでSystem.IO.Directory.GetFiles()で全ファイルを抽出して、抽出したファイルに対して正規表現によるフィルタをかけるとよい。

// 抽出条件
string filter = "*.c;*.cpp;*.h";

// 検索パス
string path = @"C:\source";

// 正規表現の条件を作成
// 本当は禁則文字の削除が必要
string file_filter = filter.Replace(".", "\\.");                 // .はエスケープする。
file_filter = file_filter.Replace("*", ".*");                    // *は.*で任意文字の繰り返しに
file_filter = file_filter.Replace("?", ".");                     // ?は.で任意の1文字に
file_filter = file_filter.Replace(";", "|");                     // ;は|でORに
// 最後に|があるとすべての文字が引っかかるので削除する
while (file_filter.EndsWith("|"))
{
    file_filter = file_filter.Remove(file_filter.Length - 1);
}
file_filer += "$";

// ファイル抽出
foreach (string file in System.IO.Directory.GetFiles(path))
{
    if (System.Text.RegularExpressions.Regex.IsMatch(file, file_filter, RegexOptions.IgnoreCace))
    {
        // ここが条件にあうファイルに対する処理
    }
}

«前の日記(2010年09月28日) 最新 次の日記(2010年10月17日)» 編集