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

C#으로 디렉터리의 모든 파일·하위 폴더 파일 및 크기까지 한 번에 가져오는 방법

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 객체를 만들어 활용합니다.