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 형태의 정규 경로예요. 여기서 xp에서 존재하는 가장 긴 선행 요소 시퀀스로 구성된 경로, y는 남은 존재하지 않는 후행 요소들로 구성된 경로예요.

예외

noexcept로 표시되지 않은 오버로드는 메모리 할당이 실패하면 std::bad_alloc을 던질 수 있어요. (이하 세부 예외 규칙은 각 오버로드의 OS API 실패 시 filesystem_error 던짐 또는 ec 설정 규칙을 따르고, 1,2)는 오류 시 빈 path를 돌려줄 수 있어요.)

더 알아보기 (Learn more)

cppreference