연습 - 파일 및 디렉터리 만들기
.NET의 File
클래스와 Directory
클래스를 사용하면 프로그래밍 방식으로 새 파일 및 디렉터리를 만들 수 있습니다.
지금까지 폴더 구조를 읽어 .json 확장명을 가진 파일을 찾을 수 있는 강력한 명령줄 애플리케이션을 .NET에서 만들었습니다. 이제 해당 파일을 읽어 포함된 데이터를 요약한 다음 salesTotals라는 새 디렉터리에 있는 새 파일에 합계를 써야 합니다.
이 연습에서는 salesTotalDir 디렉터리와 매출 합계가 정렬된 totals.txt 파일을 만듭니다.
SalesTotals 디렉터리 만들기
FindFiles
함수에서 반환된 각 파일 이름을 콘솔 출력에 쓰는 반복형foreach
루프를Program.cs
파일에서 제거합니다. 이 변경으로 인해salesFiles
변수가 사용되지 않습니다. 그러나 이 변수는 다음 단원에서 사용할 예정이므로 여기서는 일단 그대로 두겠습니다.Program.cs
파일에서 salesTotalDir 디렉터리 경로를 포함하는salesTotalDir
이라는 변수를 만듭니다.var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); var salesFiles = FindFiles(storesDirectory);
Program.cs
파일에서 디렉터리를 만드는 코드를 추가합니다.var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); Directory.CreateDirectory(salesTotalDir); // Add this line of code var salesFiles = FindFiles(storesDirectory);
totals.txt 파일 작성
Program.cs
파일에서 새로 만든 salesTotalDir 디렉터리 내에 totals.txt라는 빈 파일을 만드는 코드를 추가합니다. 지금은 파일의 내용에 빈 문자열을 사용합니다.var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir"); Directory.CreateDirectory(salesTotalDir); var salesFiles = FindFiles(storesDirectory); File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
Ctrl+S / Cmd+S를 눌러 파일을 저장합니다.
터미널 프롬프트에서 다음 코드를 실행하여 프로그램을 실행합니다.
dotnet run
파일 탐색기에서 새로 고침 아이콘을 선택합니다.
거의 완료되었습니다. 마지막 단계는 매출 파일을 읽고 합계를 계산한 다음, 새 totals.txt 파일에 총합계를 쓰는 것입니다. 다음으로 파일 내 데이터를 읽고 구문 분석하는 방법을 알아봅니다.
처리하기 어려운 부분이 있나요?
이 연습을 수행하는 동안 처리하기 어려운 부분이 있었다면 여기서 이 시점까지 완성된 전체 코드를 참조하세요.
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesTotalDir = Path.Combine(currentDirectory, "salesTotalDir");
Directory.CreateDirectory(salesTotalDir);
var salesFiles = FindFiles(storesDirectory);
File.WriteAllText(Path.Combine(salesTotalDir, "totals.txt"), String.Empty);
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}