파일 시스템 작업

완료됨

.NET에는 System.IO 네임스페이스 내에서 찾을 수 있는 파일 시스템 작업을 위한 기본 제공 형식이 포함되어 있습니다.

여기서는 C#을 사용하여 파일 시스템을 읽고 파일 및 디렉터리를 찾는 방식으로 System.IO에서 사용할 수 있는 형식에 대해 알아봅니다.

시나리오

대규모 소매점은 나중에 일괄 처리할 수 있도록 데이터를 파일에 쓰는 경우가 많습니다.

Tailwind Traders에서는 각 매장이 파일에 매출 합계를 쓴 다음, 해당 파일을 중앙 위치에 보냅니다. 이러한 파일을 사용하려면 회사는 파일 시스템에 작동할 수 있는 일괄 처리 프로세스를 만들어야 합니다.

System.IO 네임스페이스 포함

System.IO 네임스페이스에는 파일 및 디렉터리와 상호 작용할 수 있는 기본 제공 형식이 포함되어 있습니다. 예를 들어 검색 기준과 파일 및 디렉터리에 대한 getset 속성을 기반으로 파일 및 디렉터리 모음을 검색할 수 있습니다. 또한 System.IO 네임스페이스 형식을 사용하여 동기적 및 비동기적으로 데이터 스트림과 파일을 읽고 쓸 수 있습니다.

지금은 System.IO 네임스페이스에 포함된 Directory 클래스를 사용하여 디렉터리를 작업하기 위해 알아야 하는 사항에 집중하겠습니다. Directory 클래스는 디렉터리와 하위 디렉터리에서 만들기, 이동 및 열거를 위한 정적 메서드를 노출합니다.

모든 디렉터리 나열

Directory 클래스는 디렉터리를 나열(또는 열거)하는 데 자주 사용됩니다. 예를 들어, Tailwind Traders 파일 구조에는 stores라는 루트 폴더가 있습니다. 이 폴더 내에는 매장 번호로 구성된 하위 폴더가 있으며, 하위 폴더 내에는 총매출 파일과 재고 파일이 있습니다. 구조는 다음 예제와 같습니다.

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

최상위 디렉터리의 이름을 읽고 나열하려면 Directory.EnumerateDirectories 함수를 사용하면 됩니다.

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

특정 디렉터리의 파일 나열

디렉터리에 있는 모든 파일의 이름을 나열하려면 Directory.EnumerateFiles 함수를 사용하면 됩니다.

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

디렉터리와 모든 하위 디렉터리의 콘텐츠 모두 나열

Directory.EnumerateDirectories 함수와 Directory.EnumerateFiles 함수에는 모두 파일 및 디렉터리가 일치해야 하는 검색 패턴을 지정하기 위해 매개 변수를 허용하는 오버로드가 있습니다.

이들 함수에는 지정된 폴더와 해당하는 모든 하위 폴더를 재귀적으로 트래버스할지 여부를 나타내기 위해 매개 변수를 허용하는 다른 오버로드도 있습니다.

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

다음 연습에서는 Directory 클래스를 사용하여 Tailwind Traders의 기본 stores 디렉터리를 동적으로 읽어 sales.json 파일을 모두 찾습니다.

지식 점검

1.

다음 작업 중 Directory.EnumerateFiles를 사용하여 수행할 수 있는 작업은 무엇입니까?