C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 46 を表示中)
■24632 / )  Re[1]: GetFilesで複数の拡張子を取得する方法
□投稿者/ こくぶんまさひろ (7回)-(2008/09/05(Fri) 12:53:15)
こくぶんまさひろ さんの Web サイト
2008/09/05(Fri) 12:54:21 編集(投稿者)
No24626 (ren さん) に返信

foreach でゴリゴリよりは、 Array.Copy() を使うか、 List<string> を使った方がいい気がします。

# Array.Copy()
string[] strHtmlFile = System.IO.Directory.GetFiles(path, "*.html"));
string[] strDocFile = System.IO.Directory.GetFiles(path, "*.doc"));
string[] strFile = new string[strHtmlFile.Length + strDocFile.Length];
System.Array.Copy(strHtmlFile, strFile, strHtmlFile.Length);
System.Array.Copy(strDocFile, 0, strFile, strHtmlFile.Length, strDocFile.Length);

# List<string>
System.Collections.Generic.List<string> s = new System.Collections.Generic.List<string>();
s.AddRange(System.IO.Directory.GetFiles(path, "*.html"));
s.AddRange(System.IO.Directory.GetFiles(path, "*.doc"));
string[] strFile = s.ToArray();

ちなみに、別のアプローチとして、全ファイルを取得して Array.FindAll() で絞るという方法もありかなと思います。
(特に薦める訳ではありませんが。。。)

# 一応、 Array.FindAll() を使う一例
string[] strFile = System.Array.FindAll(System.IO.Directory.GetFiles(path), SearchFile);

static bool SearchFile(string file) {
  return System.Text.RegularExpressions.Regex.IsMatch(
      file,
      "\\.(?:html|doc)$",
      System.Text.RegularExpressions.RegexOptions.IgnoreCase);
}

# 追記
みきぬさんと微妙に内容かぶりました。。。

返信 編集キー/


管理者用

- Child Tree -