C#에서 특정 디렉터리뿐만 아니라 그 하위 폴더까지 포함한 모든 파일 목록을 가져오려면 Directory.GetFiles() 메서드와 함께 SearchOption.AllDirectories 옵션을 사용하면 됩니다.
재귀적 파일 검색 방법
먼저 파일을 검색할 대상 디렉터리를 지정합니다. 세 번째 인자로 SearchOption.AllDirectories를 전달하면 하위 디렉터리까지 재귀적으로 탐색합니다.
string[] myFiles = Directory.GetFiles("D:\\New\\", "*.*", SearchOption.AllDirectories);- 첫 번째 인자: 탐색을 시작할 디렉터리 경로
- 두 번째 인자: 검색 패턴 ("*.*"는 모든 파일을 의미)
- 세 번째 인자: 검색 옵션 (
AllDirectories는 하위 폴더 포함,TopDirectoryOnly는 현재 폴더만 검색)
전체 예제 코드
다음은 지정된 디렉터리와 그 하위 폴더에 있는 모든 파일을 출력하는 완전한 예제입니다.
using System;
using System.Linq;
using System.IO;
class Program {
static void Main() {
string[] myFiles = Directory.GetFiles("D:\\New\\", "*.*", SearchOption.AllDirectories);
foreach (string res in myFiles) {
Console.WriteLine(res);
}
}
}실행 결과
위 코드를 실행하면 해당 폴더와 하위 폴더에 있는 모든 파일이 다음과 같이 출력됩니다.
D:\New\one.txt D:\New\two.html D:\New\nature.png
참고 사항
파일 개수가 매우 많거나 대용량 디렉터리를 다룰 때는 전체 목록을 배열로 한 번에 로드하는 GetFiles()보다, 파일을 하나씩 열거하는 Directory.EnumerateFiles()를 사용하는 것이 메모리 효율면에서 더 유리합니다. 또한 접근 권한이 없는 폴더가 존재할 경우 UnauthorizedAccessException이 발생할 수 있으므로, 필요하다면 try-catch 블록으로 예외 처리를 추가하는 것이 좋습니다.