C#에서는 Directory.GetFiles 메서드를 사용하면 특정 디렉터리에 있는 파일들을 손쉽게 조회할 수 있습니다.
Directory.GetFiles는 지정한 검색 패턴과 일치하는 모든 파일의 이름(전체 경로 포함)을 반환하며, 필요에 따라 하위 디렉터리까지 함께 검색할 수 있습니다.
검색 패턴에서 별표(*)는 해당 위치에 0개 이상의 임의 문자가 올 수 있음을 의미합니다. 예를 들어 "*.*"는 확장자를 가진 모든 파일을 뜻합니다.
검색 범위는 SearchOption 열거형으로 지정합니다.
- SearchOption.TopDirectoryOnly: 최상위 디렉터리만 검색합니다.
- SearchOption.AllDirectories: 최상위 디렉터리와 모든 하위 디렉터리를 재귀적으로 검색합니다.
또한 FileInfo 클래스를 사용하면 파일 크기(Length), 이름(Name) 등 상세 정보를 추가로 얻을 수 있습니다.
예제 1 — 하위 디렉터리까지 모든 파일 검색
static void Main(string[] args) {
string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";
var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files) {
Console.WriteLine(file);
}
Console.ReadLine();
}출력 결과
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain\TestFolderMain.txt C:\Users\Koushik\Desktop\TestFolder\TestFolderMain 1\TestFolderMain1.txt C:\Users\Koushik\Desktop\TestFolder\TestFolderMain 2\TestFolderMain2.txt C:\Users\Koushik\Desktop\TestFolder\TestFolderMain 2\TestFolderMainSubDirectory\TestFolderSubDirectory.txt
SearchOption.AllDirectories를 지정했기 때문에 최상위 폴더뿐 아니라 그 안의 모든 하위 폴더에 있는 파일까지 전부 출력되는 것을 확인할 수 있습니다.
예제 2 — 최상위 디렉터리만 검색
static void Main(string[] args) {
string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";
var files = Directory.GetFiles(rootPath, "*.*", SearchOption.TopDirectoryOnly);
foreach (string file in files) {
Console.WriteLine(file);
}
Console.ReadLine();
}출력 결과
C:\Users\Koushik\Desktop\TestFolder\Topdirectory.txt
이번에는 TopDirectoryOnly 옵션을 사용했기 때문에 최상위 폴더에 바로 존재하는 파일 하나만 반환됩니다.
예제 3 — 파일 이름과 크기(바이트) 함께 출력하기
static void Main(string[] args) {
string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";
var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (string file in files) {
var info = new FileInfo(file);
Console.WriteLine($"{ Path.GetFileName(file) }: { info.Length } bytes");
}
Console.ReadLine();
}출력 결과
Topdirectory.txt: 0 bytes TestFolderMain.txt: 0 bytes TestFolderMain1.txt: 10 bytes TestFolderMain2.txt: 20 bytes
각 파일 경로에 대해 FileInfo 객체를 생성하고 Length 속성을 읽으면 파일 크기를 바이트 단위로 확인할 수 있습니다. 여기에 Path.GetFileName을 조합하면 전체 경로 대신 파일 이름만 깔끔하게 출력할 수 있습니다.
정리
- 파일 목록 조회에는 Directory.GetFiles를 사용합니다.
- 두 번째 매개변수로 검색 패턴(예: "*.*")을, 세 번째 매개변수로 검색 범위(SearchOption)를 지정할 수 있습니다.
- 파일 크기 등 상세 정보가 필요하면 경로 문자열로 FileInfo 객체를 만들어 활용합니다.