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: 두 점 문자 ..로 된 파일 이름으로, 부모 디렉터리를 가리키는 디렉터리 이름이에요.
  • 디렉터리 구분자: 슬래시 / 또는 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 등 — 순회.

더 알아보기 (Learn more)

cppreference