std::filesystem:: path
|
헤더 파일에 정의됨
<filesystem>
|
||
|
class
path
;
|
(C++17부터) | |
path
타입의 객체는 파일 시스템 상의 경로를 나타냅니다. 경로의 구문적 측면만 처리됩니다: 경로명은 존재하지 않는 경로나 현재 파일 시스템이나 운영체제에서 존재할 수 없는 경로를 나타낼 수도 있습니다.
경로 이름은 다음과 같은 구문을 가집니다:
- root-name (optional) : 다중 루트를 가진 파일 시스템에서 루트를 식별합니다(예: "C:" 또는 "//myserver" ). 모호한 경우, 유효한 root-name 을 형성하는 가장 긴 문자 시퀀스가 root-name 으로 처리됩니다. 표준 라이브러리는 OS API가 이해하는 것 외에 추가적인 root-name을 정의할 수 있습니다.
- root-directory (optional) : 디렉토리 구분자로, 존재할 경우 이 경로를 절대 경로 로 표시합니다. 누락된 경우(그리고 루트 이름 외 첫 번째 요소가 파일 이름인 경우), 경로는 상대 경로 이며 파일 이름으로 확인하기 위해 시작 위치로 다른 경로가 필요합니다.
- 다음 중 0개 이상:
-
- file-name : 디렉토리 구분자나 선호하는 디렉토리 구분자가 아닌 문자들의 시퀀스 (운영체제나 파일 시스템에 의해 추가 제한이 적용될 수 있음). 이 이름은 파일, 하드 링크, 심볼릭 링크, 또는 디렉토리를 식별할 수 있습니다. 두 가지 특별한 file-name 이 인식됩니다:
-
- dot : 단일 점 문자로 구성된 파일 이름 . 은 현재 디렉토리를 참조하는 디렉토리 이름입니다.
- dot-dot : 두 개의 점 문자로 구성된 파일 이름 .. 은 부모 디렉토리를 참조하는 디렉토리 이름입니다.
-
directory-separator
s: 슬래시 문자
/
또는
path::preferred_separator로 제공되는 대체 문자. 이 문자가 반복되면 단일 디렉토리 구분자로 처리됩니다: / usr ///////lib 는 / usr / lib 와 동일합니다.
경로는 다음 알고리즘을 따라 정규화(normalized) 될 수 있습니다:
- 경로가 비어 있으면 중지합니다(빈 경로의 정규 형식은 빈 경로입니다).
-
각
directory-separator
(여러 슬래시로 구성될 수 있음)를 단일
path::preferred_separator로 교체합니다. -
root-name
내의 각 슬래시 문자를
path::preferred_separator로 교체합니다. - 각 dot 과 바로 뒤따르는 directory-separator 를 제거합니다.
- dot-dot 이 아닌 파일명 중 바로 뒤에 directory-separator 와 dot-dot 이 오는 경우, 해당 파일명과 바로 뒤따르는 directory-separator 를 모두 제거합니다.
- root-directory 가 있는 경우, 모든 dot-dot 과 바로 뒤따르는 directory-separator 를 제거합니다.
- 마지막 파일명이 dot-dot 인 경우, 뒤따르는 directory-separator 를 제거합니다.
- 경로가 비어 있으면 dot 을 추가합니다( . / 의 정규 형식은 . 입니다).
경로는 begin() 과 end() 함수가 반환하는 반복자를 통해 요소 단위로 순회할 수 있으며, 이는 경로를 일반 형식으로 보고 루트 이름, 루트 디렉터리 및 후속 파일 이름 요소들을 반복합니다(디렉터리 구분자는 루트 디렉터리를 식별하는 것을 제외하고 건너뜁니다). 경로의 가장 마지막 요소가 디렉터리 구분자인 경우, 마지막 반복자는 빈 요소를 역참조합니다.
path
객체의 비상수 멤버 함수를 호출하면 해당 객체의 요소를 참조하는 모든 반복자가 무효화됩니다.
운영체제가 위에서 설명한 이식 가능한 일반(generic) 구문과 다른 네이티브(native) 구문을 사용하는 경우, "검출된 형식(detected format)"을 수용하도록 정의된 라이브러리 함수들은 두 형식의 경로 이름을 모두 수용합니다: 검출된 형식 인수는 일반 형식과 일치하면서 운영체제에서 네이티브 경로로 허용되지 않는 경우에만 일반 형식으로 간주됩니다. 디렉터리 경로 이름과 파일 경로 이름 간에 네이티브 형식이 다른 운영체제에서는, 일반 경로 이름이 디렉터리 구분자로 끝나면 디렉터리 경로로 처리되고 그렇지 않으면 일반 파일로 처리됩니다.
어떤 경우든, 경로 클래스는 네이티브 형식으로 경로명을 저장하는 것처럼 동작하며 필요에 따라 자동으로 일반 형식으로 변환합니다(각 멤버 함수는 경로를 어떤 형식으로 해석하는지 명시합니다).
POSIX 시스템에서 일반 형식은 기본 형식이며 이들 간에 구분하거나 변환할 필요가 없습니다.
경로는 std::basic_string 과 암시적으로 변환 가능하며, 이를 통해 다른 파일 API와 함께 사용할 수 있습니다.
스트림 연산자 는 std::quoted 를 사용하므로 공백이 나중에 스트림 입력 연산자 에 의해 읽힐 때 잘림이 발생하지 않습니다.
분해 멤버 함수
(예:
extension
)는 다른 API들이 문자열 객체를 반환하는 것과 달리
filesystem::path
객체를 반환합니다.
목차 |
멤버 타입
| 유형 | 정의 | ||||||||
value_type
|
파일 시스템의 기본 인코딩에서 사용하는 문자 유형: char on POSIX, wchar_t on Windows | ||||||||
string_type
|
std:: basic_string < value_type > | ||||||||
const_iterator
|
상수
LegacyInputIterator
로서
value_type
이
path
이며
LegacyBidirectionalIterator
의 모든 요구사항을 충족하지만, 동일한 두 개의 역참조 가능한 반복자
a
와
b
(유형
const_iterator
)에 대해
*
a
와
*
b
가 동일한 객체를 참조해야 한다는 요구사항은 없음.
|
||||||||
iterator
|
const_iterator
|
||||||||
|
경로명의 문자열 표현을 해석하는 방식을 결정함.
다음 열거자들이 정의됨:
(public member enum) |
멤버 상수
|
constexpr value_type
preferred_separator
[static]
|
이식 가능한
/
에 추가적으로 사용될 수 있는 대체 디렉토리 구분자. Windows에서는 백슬래시 문자
\
입니다. POSIX에서는 이식 가능한 구분자와 동일한 슬래시
/
입니다.
(public static member constant) |
멤버 함수
path
를 생성합니다
(public member function) |
|
path
객체를 파괴합니다
(public member function) |
|
|
다른 경로를 할당함
(public member function) |
|
|
내용을 할당합니다
(public member function) |
|
연결(Concatenation) |
|
|
디렉토리 구분자와 함께 경로에 요소들을 추가합니다
(public member function) |
|
|
디렉토리 구분자를 도입하지 않고 두 경로를 연결합니다
(public member function) |
|
수정자 |
|
|
내용을 지움
(public member function) |
|
|
디렉토리 구분자를 기본 선호 디렉토리 구분자로 변환
(public member function) |
|
|
파일명 경로 구성 요소 제거
(public member function) |
|
|
마지막 경로 구성 요소를 다른 경로로 교체합니다
(public member function) |
|
|
확장자를 교체합니다
(public member function) |
|
|
두 경로를 교환합니다
(public member function) |
|
포맷 옵저버 |
|
|
경로의 네이티브 버전을 반환합니다
(public member function) |
|
|
네이티브 경로명 형식으로 변환된 문자열로 경로를 반환합니다
(public member function) |
|
|
경로를 일반 경로명 형식으로 변환한 문자열을 반환합니다
(public member function) |
|
비교 |
|
|
두 경로의 어휘적 표현을 사전순으로 비교합니다
(public member function) |
|
생성 |
|
|
경로를 정규 형식으로 변환
경로를 상대 형식으로 변환 경로를 근사 형식으로 변환 (public member function) |
|
분해 |
|
|
경로의 루트 이름을 반환합니다(존재하는 경우)
(public member function) |
|
|
경로에 존재하는 경우 루트 디렉토리를 반환합니다
(public member function) |
|
|
경로의 루트 경로를 반환합니다(존재하는 경우)
(public member function) |
|
|
루트 경로에 대한 상대 경로를 반환합니다
(public member function) |
|
|
부모 경로의 경로를 반환합니다
(public member function) |
|
|
파일 이름 경로 구성 요소를 반환합니다
(public member function) |
|
|
경로의 스템 구성 요소를 반환합니다 (최종 확장자를 제외한 파일명)
(public member function) |
|
|
파일 확장자 경로 구성 요소를 반환합니다
(public member function) |
|
쿼리 |
|
|
경로가 비어 있는지 확인합니다
(public member function) |
|
|
해당 경로 구성 요소가 비어 있지 않은지 확인합니다
(public member function) |
|
|
root_path()
가 파일 시스템 위치를 고유하게 식별하는지 확인합니다
(public member function) |
|
반복자 |
|
|
경로를 요소 시퀀스로 접근하는 반복자
(public member function) |
|
비멤버 함수
|
다음 네임스페이스에 정의됨
std::filesystem
|
|
|
(C++17)
|
std::swap
알고리즘을 특수화함
(함수) |
|
(C++17)
|
경로 객체에 대한 해시 값을 계산함
(함수) |
|
(C++17)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++20)
|
두 경로를 사전식으로 비교함
(함수) |
|
(C++17)
|
디렉터리 구분자로 두 경로를 연결함
(함수) |
|
(C++17)
|
따옴표로 묶인 경로에 대한 스트림 입출력을 수행함
(함수) |
|
(C++17)
(deprecated in C++20)
|
UTF-8 인코딩된 소스로부터
path
를 생성함
(함수) |
헬퍼 클래스
|
정의된 네임스페이스
std
|
|
|
std::filesystem::path
에 대한 해시 지원
(클래스 템플릿 특수화) |
|
filesystem::path
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
|
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3657 | C++17 |
hash
for
path
was disabled
|
enabled |