.NET에서 파일 경로 작업
.NET에는 파일 시스템 경로 작업을 위한 기본 제공 메커니즘이 있습니다.
이전 연습에는 구문 분석할 폴더가 너무 많습니다. 파일 시스템에 파일 및 폴더가 많은 경우 경로를 수동으로 작성하는 것이 번거로울 수 있습니다. 다행히, .NET은 파일 경로를 더 쉽게 처리하도록 하는 몇 가지 기본 제공 상수 및 유틸리티 함수를 제공합니다.
여기서는 프로그램을 더 스마트하고 복원력 있게 만들 수 있도록 System.IO
네임스페이스 및 System.Environment
형식의 일부 상수 및 유틸리티 함수에 대해 알아봅니다.
현재 디렉터리 확인
프로그램을 실행해야 하는 디렉터리나 경로를 모를 수도 있습니다. 프로그램에서 현재 디렉터리를 사용하게 하려고 하지만 경로를 알 수 없는 경우를 가정해 보겠습니다.
.NET은 Directory.GetCurrentDirectory
메서드를 통해 현재 디렉터리의 전체 경로를 공개합니다.
Console.WriteLine(Directory.GetCurrentDirectory());
다음 구조의 201 폴더에서 이전 코드를 실행하면 Directory.GetCurrentDirectory()
는 stores\201
을 반환합니다.
📂 stores
📂 201
특수 디렉터리 작업
.NET은 모든 위치에서, 즉 Windows, macOS, Linux뿐만 아니라 iOS와 Android 같은 모바일 운영 체제에서도 실행됩니다. 각 운영 체제에는 특수 시스템 폴더(예: 사용자별 파일을 위한 홈 디렉터리, 데스크톱 디렉터리, 임시 파일을 저장하는 디렉터리)라는 개념이 있을 수도 있고 없을 수도 있습니다.
이러한 유형의 특수 디렉터리는 운영 체제마다 다릅니다. 각 운영 체제의 디렉터리 구조를 기억하고 현재 OS에 따라 전환을 수행하려면 번거롭습니다.
System.Environment.SpecialFolder
열거형은 특정 시스템 폴더 경로를 검색하는 상수를 지정합니다.
다음 코드는 모든 운영 체제에 대해 Windows의 내 문서 폴더에 해당하는 경로나, 사용자의 홈 디렉터리를 반환합니다. 심지어 코드를 Linux에서 실행하는 경우에도 그렇습니다.
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
경로 작업
경로는 자주 언급되는 주제이므로 .NET에는 특히 경로 작업을 위한 Path
라는 클래스가 포함되어 있습니다.
Path
클래스는 .NET의 System.IO
네임스페이스에 있으며 설치하지 않아도 됩니다.
특수 경로 문자
운영 체제마다 디렉터리 수준을 구분하는 데 서로 다른 문자가 사용됩니다.
예를 들어 Windows는 백슬래시(stores\201
)를 사용하고, macOS는 슬래시(stores/201
)를 사용합니다.
올바른 문자를 사용할 수 있도록 Path
클래스에는 DirectorySeparatorChar
필드가 포함됩니다.
.NET에서는 경로를 수동으로 만들어야 하는 경우 해당 필드를 각 운영 체제에 해당되는 구분 문자로 자동 해석합니다.
Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");
// returns:
// stores\201 on Windows
//
// stores/201 on macOS
조인 경로
Path
클래스는 문자열인 파일 및 폴더 경로 개념을 사용하여 작동합니다. Path
클래스를 사용하여 특정 운영 체에 적합한 경로를 만들 수 있습니다.
예를 들어 stores/201 폴더의 경로를 가져오려는 경우 Path.Combine
함수를 사용할 수 있습니다.
Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201
프로그램이 다수의 서로 다른 운영 체제에서 실행될 수 있으므로 하드 코딩 문자열 대신 Path.Combine
클래스나 Path.DirectorySeparatorChar
클래스를 사용할 수 있습니다. Path
클래스는 항상 실행되는 운영 체제에 맞게 올바른 형식의 경로를 제공합니다.
팁
Path
클래스는 항목이 실제로 있는지를 확인하지 않습니다. 경로는 물리적이 아니라 개념적이며 클래스는 문자열을 작성하고 구문 분석합니다.
파일 이름 확장명 확인
Path
클래스는 파일 이름의 확장명을 제공할 수도 있습니다. 파일이 있고 JSON 파일인지 확인하려는 경우 Path.GetExtension
함수를 사용할 수 있습니다.
Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json
파일 또는 경로에 대해 알아야 하는 모든 정보 가져오기
Path
클래스에는 다양한 작업을 수행하는 여러 메서드가 포함되어 있습니다. DirectoryInfo
클래스나 FileInfo
클래스를 각각 사용하여 디렉터리나 파일에 대한 대부분의 정보를 가져올 수 있습니다.
string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";
FileInfo info = new FileInfo(fileName);
Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more
Path
, DirectoryInfo
, FileInfo
클래스에는 더 유용한 여러 속성과 유틸리티 메서드가 있지만, 이러한 항목이 가장 자주 사용되는 핵심 개념입니다. 다음 연습에서는 경로를 작성하고 .json 파일을 확인합니다.