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

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

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

Re[3]: GetFilesで複数の拡張子を取得する方法


(過去ログ 46 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■24626 / inTopicNo.1)  GetFilesで複数の拡張子を取得する方法
  
□投稿者/ ren (1回)-(2008/09/05(Fri) 11:21:43)

分類:[C#] 


Microsoft Visual C# 2005で書いています。

フォルダの中にあるファイルで指定した拡張子を取得するのですが、
指定した拡張子が複数の場合、一文で記述できずに困っています。
string[] strFile = System.IO.Directory.GetFiles(path, "*.html");


現在はforeachを使って配列の中に格納しているのですが、
一文で記述できる方法がありましたらご教授ください。
よろしくお願いします。


foreach (string strFile1 in System.IO.Directory.GetFiles(path, "*.html"))
{
strFile[no] = strFile1;
no++;
}
foreach (string strFile1 in System.IO.Directory.GetFiles(path, "*.doc"))
{
strFile[no] = strFile1;
no++;
}



引用返信 編集キー/
■24629 / inTopicNo.2)  Re[1]: GetFilesで複数の拡張子を取得する方法
□投稿者/ Hongliang (291回)-(2008/09/05(Fri) 12:21:54)
> 一文で記述できる方法がありましたらご教授ください。

基本クラスライブラリには存在しません。
引用返信 編集キー/
■24631 / inTopicNo.3)  Re[2]: GetFilesで複数の拡張子を取得する方法
□投稿者/ みきぬ (70回)-(2008/09/05(Fri) 12:49:48)
なんとなく書き換えてみました。

List<string> files = new List<string>();

foreach (string exp in new string[] { "*.html", "*.doc" })
{
    files.AddRange(System.IO.Directory.GetFiles(path, exp));
}

strFile = files.ToArray(); 

引用返信 編集キー/
■24632 / inTopicNo.4)  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);
}

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

引用返信 編集キー/
■24633 / inTopicNo.5)  Re[2]: GetFilesで複数の拡張子を取得する方法
□投稿者/ シャノン (600回)-(2008/09/05(Fri) 12:57:51)
No24632 (こくぶんまさひろ さん) に返信
# 2005 じゃ使えないけどさ…

string[] files = Directory.GetFiles(path, "*.doc").Concat(Directory.GetFiles(path, "*.html")).ToArray();
引用返信 編集キー/
■24639 / inTopicNo.6)  Re[3]: GetFilesで複数の拡張子を取得する方法
□投稿者/ ren (3回)-(2008/09/05(Fri) 14:02:48)
Hongliangさん、みきぬさん、こくぶんまさひろさん、シャノンさんご返信ありがとうございます。

Array.Copy()を使う方法も考えていたのですが実装できていませんでした。
とても参考になりました。

色々な方法を教えてくださってありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -