2010/12/10

[C#]フォルダ内のすべてのファイルを返す

このエントリーをはてなブックマークに追加

string [] fileList = Directory.GetFiles(fontFolder,"*",SearchOption.AllDirectories);

終わり。
一行でした。

三番目のパラメータを省略するか、SearchOption.TopDirectoryOnlyを指定すると、サブフォルダまでは潜らずに指定のフォルダ直下のファイルだけを探してくれます。

昔書いたコード見てたら、意気揚々と関数化されていました。こんな再帰つくらんでもよかった。

private IEnumerable<string> GetFiles(string folder) {
foreach (string dirName in Directory.GetDirectories(folder)) {
foreach (string fileName in this.GetFiles(dirName)){
yield return fileName;
}
}

foreach (string fileName in Directory.GetFiles(folder)) {
yield return fileName;
}
}

yield使ってるということは、C#2.0以降ということなので、上の書き方もできたはず。
しかしまあ、MacG4混在環境ならGetFilesは使えないので、Directory.GetFilesのところをWindowsAPIの関数に書き換えて自作するのは仕方ないです。

それはそうと、yieldを使った再帰ってもうちょっとマシな書き方ないのかと思う。

0 件のコメント :

コメントを投稿