C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のEnumerateFilesメソッド:サブディレクトリも含めてファイル一覧を再帰的に取得する方法

EnumerateFilesメソッドとは

C#では、Directory.EnumerateFilesメソッドを使用することで、指定したディレクトリ内のすべてのファイルを効率的に取得できます。このメソッドは遅延評価(列挙)方式を採用しているため、ファイル数が多いディレクトリでもメモリ消費を抑えながらスムーズに処理できるのが特徴です。

さらに、第3引数にSearchOption.AllDirectoriesを指定すると、サブディレクトリも含めて再帰的にファイルを検索できます。

Directory.EnumerateFiles(@"D:\NEW", "*.*", SearchOption.AllDirectories)

上記のように、C#でディレクトリ内のファイル一覧を取得するにはSearchOption.AllDirectoriesを活用します。

使用例

以下は、「D:\NEW」フォルダとそのサブフォルダ内に存在するすべてのファイルを取得し、コンソールに表示するサンプルコードです。

using System;
using System.IO;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            foreach (string allFiles in Directory.EnumerateFiles(@"D:\NEW", "*.*", SearchOption.AllDirectories)) {
                Console.WriteLine(allFiles);
            }
        }
    }
}

実行結果

上記のコードを実行すると、見つかったファイルのパスが順番に出力されます。

D:\NEW\my.txt
D:\NEW\amit.html
D:\NEW\tutorials\java\a.java

補足ポイント

  • 遅延評価による高速化: EnumerateFilesはファイルを1件ずつ逐次返すため、大量のファイルが存在する場合でも即座に処理を開始できます。
  • GetFilesとの違い: Directory.GetFilesは全ファイルの一覧を配列として事前に作成しますが、EnumerateFilesは必要な分だけ列挙するため、パフォーマンス面で有利です。
  • 検索パターンの指定: "*.*"を指定すればすべてのファイルが対象になりますが、"*.txt"のように拡張子を限定することも可能です。
  1. C#のCompareTo()メソッドの使い方を解説

    C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数

  2. RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法

    2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが