fenri's diary

基本的には勉強し始めたC#のメモ。後は140字で収まらない駄文。

正規表現を使用してファイルを探す

//ファイル名検索の実行
string[] files = SearchFile(@"C:\prj\Temp", "TestText.....txt", "*.txt", false);
//結果の表示
foreach (string oldName in files)
{
	string newName = oldName.Replace("TestText", "TextNo");
	// ファイル名の変更(コピーで対応)
	System.IO.File.Copy(oldName, newName, true);
	System.IO.File.Delete(oldName);
}


/// <summary>
/// ファイルの検索を行う
/// </summary>
/// <param name="dirPath">フォルダのパス。</param>
/// <param name="pattern">検索する正規表現のパターン。</param>
/// <param name="fileWildcards">対象とするファイル。</param>
/// <param name="ignoreCase">大文字小文字を区別するか。</param>
/// <returns>見つかったファイルパスの配列。</returns>
public static string[] SearchFile(
	string dirPath, string pattern, string fileWildcards, bool ignoreCase)
{
	System.Collections.ArrayList fileCol =
		new System.Collections.ArrayList();

	//正規表現のオプションを設定
	System.Text.RegularExpressions.RegexOptions opts =
		System.Text.RegularExpressions.RegexOptions.None;
	if (ignoreCase)
		opts |= System.Text.RegularExpressions.RegexOptions.IgnoreCase;
	System.Text.RegularExpressions.Regex reg =
		new System.Text.RegularExpressions.Regex(pattern, opts);

	//フォルダ内にあるファイルを取得
	System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dirPath);
	System.IO.FileInfo[] files = dir.GetFiles(fileWildcards);
	foreach (System.IO.FileInfo f in files)
	{
		//正規表現のパターンを使用して一つずつファイルを調べる
		if ( reg.IsMatch(f.FullName))
		{
			fileCol.Add(f.FullName);
		}
	}

	return (string[])fileCol.ToArray(typeof(string));
}