std::filesystem::path
std::filesystem::path (파일시스템 경로)
파일시스템의 경로를 나타내는 클래스예요. 경로의 구문적 측면만 다루며, 경로 이름은 존재하지 않거나 현재 파일시스템·OS에 존재할 수 없는 경로를 나타낼 수도 있어요. C++17부터 있어요.
출처: cppreference
본문
<filesystem> 헤더에 정의돼 있어요.
class path;
path 타입의 객체는 파일시스템의 경로를 나타내요. 경로의 구문적 측면만 다뤄져요. 경로 이름은 존재하지 않는 경로나 현재 파일시스템·OS에 존재할 수 없는 경로를 나타낼 수도 있어요.
경로 이름 구문
- root-name(선택): 여러 루트를 가진 파일시스템에서 루트를 식별해요(
"C:"또는"//myserver"처럼). 모호하면 유효한 root-name을 이루는 가장 긴 문자 시퀀스가 root-name으로 취급돼요. 표준 라이브러리는 OS API가 이해하는 것 외에 추가 root-name을 정의할 수도 있어요. - root-directory(선택): 디렉터리 구분자로, 있으면 이 경로를 절대 경로로 표시해요. 없으면(그리고 root-name 외의 첫 요소가 파일 이름이면) 경로는 상대적이고, 파일 이름으로 귀결되려면 다른 경로가 시작 위치로 필요해요.
- 파일 이름(file-name): 디렉터리 구분자나 선호 디렉터리 구분자가 아닌 문자 시퀀스(추가 제한은 OS·파일시스템이 부과할 수 있음). 파일·하드 링크·심볼릭 링크·디렉터리를 식별할 수 있어요. 두 특수 파일 이름이 인식돼요.
- dot: 단일 점 문자
.로 된 파일 이름으로, 현재 디렉터리를 가리키는 디렉터리 이름이에요. - dot-dot: 두 점 문자
..로 된 파일 이름으로, 부모 디렉터리를 가리키는 디렉터리 이름이에요.
- dot: 단일 점 문자
- 디렉터리 구분자: 슬래시
/또는path::preferred_separator로 제공되는 대체 문자. 이 문자가 반복되면 단일 디렉터리 구분자로 취급돼요./usr///////lib는/usr/lib와 같아요.
정규화 알고리즘
경로는 다음 알고리즘으로 정규화될 수 있어요.
- 경로가 비어 있으면 멈춘다(빈 경로의 정규 형태는 빈 경로).
- 각 디렉터리 구분자(여러 슬래시일 수 있음)를 단일
path::preferred_separator로 교체. - root-name의 각 슬래시를
path::preferred_separator로 교체. - 각 dot와 그 바로 뒤의 디렉터리 구분자를 제거.
- 디렉터리 구분자와 dot-dot이 바로 뒤에 오는 각 비-dot-dot 파일 이름을, 그 뒤에 오는 디렉터리 구분자와 함께 제거.
- root-directory가 있으면 모든 dot-dot과 그 바로 뒤의 디렉터리 구분자를 제거.
- 마지막 파일 이름이 dot-dot이면 뒤에 오는 디렉터리 구분자를 제거.
- 경로가 비어 있으면(
/가 있는 경우로) 루트 디렉터리로 되돌린다.
멤버 함수(일부)
- value_type, string_type, preferred_separator — 타입·구분자 관련.
- 생성자/대입/append(operator/=)/concat(operator+=) — 경로 구성.
- clear, make_preferred — 경로 조작.
- relative_path, parent_path, filename, stem, extension — 구성 요소 분해.
- is_absolute, is_relative — 경로 성질.
- lexically_normal, lexically_relative, lexically_proximate — 어휘적 연산.
- compare, operator==, operator!=, operator<, operator<=> — 비교.
- string, wstring, u8string, u16string, u32string, generic_string 등 — 문자열 변환.
- replace_extension, remove_filename, replace_filename, remove_extension — 경로 수정.
- begin, end, iterator, c_str 등 — 순회.