Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Directory.EnumerateFiles 메서드로 하위 폴더까지 파일 목록 한 번에 가져오기

C#의 Directory.EnumerateFiles 메서드란?

C#에서 Directory.EnumerateFiles() 메서드는 지정한 경로에 존재하는 파일들을 열거(enumerate)하는 데 사용됩니다. 이 메서드는 파일 전체 목록을 미리 로딩하지 않고 필요할 때마다 하나씩 반환하는 지연 평가(lazy evaluation) 방식으로 동작하기 때문에, 대용량 디렉터리를 다룰 때 성능 면에서 유리합니다.

특히 SearchOption.AllDirectories 옵션을 사용하면 현재 폴더뿐만 아니라 그 아래의 모든 하위 폴더까지 재귀적으로 탐색하여 파일을 검색할 수 있습니다.

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

주요 매개변수

  • path: 탐색을 시작할 디렉터리 경로입니다.
  • searchPattern: 검색할 파일 패턴입니다. 예를 들어 "*.*"는 모든 파일을 의미하며, "*.txt"처럼 특정 확장자만 지정할 수도 있습니다.
  • searchOption: TopDirectoryOnly(현재 폴더만) 또는 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

GetFiles와의 차이점

Directory.GetFiles()도 같은 기능을 수행하지만, 두 메서드에는 중요한 차이가 있습니다.

  • GetFiles(): 검색 결과를 배열에 모두 담은 후 반환하므로, 파일이 많으면 첫 번째 결과를 받기까지 시간이 오래 걸릴 수 있습니다.
  • EnumerateFiles(): 검색을 진행하면서 파일 정보를 하나씩 스트리밍 방식으로 반환하므로, 대규모 디렉터리 탐색 시 더 빠르게 작업을 시작할 수 있습니다.

따라서 파일 개수가 많거나 하위 폴더를 광범위하게 탐색해야 하는 경우에는 EnumerateFiles() 사용을 권장합니다.