std::filesystem::canonical / weakly_canonical
std::filesystem::canonical / weakly_canonical (정규 경로 만들기)
경로를 정규 절대 경로(canonical absolute path)로 변환하는 함수예요. canonical은 경로가 존재해야 하고, weakly_canonical은 존재하지 않는 요소도 허용해요. C++17부터 있어요.
출처: cppreference
본문
<filesystem> 헤더에 정의돼 있어요.
path canonical( const std::filesystem::path& p ); // (1) C++17
path canonical( const std::filesystem::path& p, std::error_code& ec ); // (2) C++17
path weakly_canonical( const std::filesystem::path& p ); // (3) C++17
path weakly_canonical( const std::filesystem::path& p, std::error_code& ec ); // (4) C++17
- 1,2) 경로
p를 일반 형식 표현에서 점(dot), 점-점(dot-dot) 요소나 심볼릭 링크가 없는 절대 경로인 정규 절대 경로로 변환해요.p가 절대 경로가 아니면 먼저std::filesystem::absolute(p)로 절대 경로가 된 것처럼 동작해요. 경로p는 존재해야 해요. - 3,4)
p중 존재하는 선행 요소들(각각status(p)또는status(p, ec)로 판정)로 구성된 경로에canonical()을 호출한 결과에, 존재하지 않는 나머지 요소들을operator/=로 이어 붙인 경로를 돌려줘요. 결과 경로는 정규(normal) 형태예요.
매개변수
p— 절대 또는 상대일 수 있는 경로.canonical에서는 반드시 존재하는 경로여야 해요.ec— 오류 상태를 저장할 오류 코드
반환값
- 1,2)
std::filesystem::absolute(p)와 같은 파일로 귀결되는 절대 경로예요. - 3,4)
canonical(x)/y형태의 정규 경로예요. 여기서x는p에서 존재하는 가장 긴 선행 요소 시퀀스로 구성된 경로,y는 남은 존재하지 않는 후행 요소들로 구성된 경로예요.
예외
noexcept로 표시되지 않은 오버로드는 메모리 할당이 실패하면 std::bad_alloc을 던질 수 있어요. (이하 세부 예외 규칙은 각 오버로드의 OS API 실패 시 filesystem_error 던짐 또는 ec 설정 규칙을 따르고, 1,2)는 오류 시 빈 path를 돌려줄 수 있어요.)