Namespaces
Variants

std::filesystem::path:: append, std::filesystem::path:: operator/=

From cppreference.net
path & operator / = ( const path & p ) ;
(1) (C++17부터)
template < class Source >
path & operator / = ( const Source & source ) ;
(2) (C++17부터)
template < class Source >
path & append ( const Source & source ) ;
(3) (C++17부터)
template < class InputIt >
path & append ( InputIt first, InputIt last ) ;
(4) (C++17부터)
1) 만약 p. is_absolute ( ) || ( p. has_root_name ( ) && p. root_name ( ) ! = root_name ( ) ) 라면, 현재 경로를 p operator = ( p ) 와 같이 교체하고 종료합니다.
* 그렇지 않고, p. has_root_directory ( ) 가 참이면, 루트 디렉터리와 상대 경로 전체를 * this 의 일반 형식 경로명에서 제거합니다.
* 그렇지 않고 has_filename ( ) || ( ! has_root_directory ( ) && is_absolute ( ) ) 이면, path::preferred_separator * this 의 일반 형식에 추가합니다.
* 어느 쪽이든, 그런 다음 p 의 네이티브 형식 경로명을, root-name 을 제네릭 형식에서 생략하여, * this 의 네이티브 형식에 추가합니다.
// "//host"가 루트 이름인 경우
path("//host")  / "foo" // 결과는      "//host/foo" (구분자와 함께 추가)
path("//host/") / "foo" // 결과 또한 "//host/foo" (구분자 없이 추가)
// POSIX에서,
path("foo") / ""      // 결과는 "foo/" (추가)
path("foo") / "/bar"; // 결과는 "/bar" (대체)
// Windows에서,
path("foo") / "C:/bar";  // 결과는 "C:/bar" (대체)
path("foo") / "C:";      // 결과는 "C:"     (대체)
path("C:") / "";         // 결과는 "C:"     (구분자 없이 추가)
path("C:foo") / "/bar";  // 결과 "C:/bar"        (상대 경로 제거 후 추가)
path("C:foo") / "C:bar"; // 결과 "C:foo/bar"     (p의 루트 이름을 생략하고 추가)
2,3) (1) 와 동일하지만, 모든 std::basic_string , std::basic_string_view , null-terminated multicharacter string, 또는 null-terminated multicharacter sequence를 가리키는 입력 반복자를 허용합니다. 다음 코드와 동등합니다: return operator / = ( path ( source ) ) ; .
4) (1) 와 동일하지만, 멀티바이트 문자열을 지정하는 모든 반복자 쌍을 허용합니다. 다음 코드와 동일합니다: return operator / = ( path ( first, last ) ) ; .

(2) (3) 은 다음 조건이 충족될 때에만 오버로드 해결에 참여합니다: Source path 가 동일한 타입이 아니며, 다음 중 하나를 만족하는 경우:

목차

매개변수

p - 추가할 경로명
source - std::basic_string , std::basic_string_view , 널 종료 다중 문자 문자열, 또는 널 종료 다중 문자 시퀀스를 가리키는 입력 반복자 (휴대용 형식이나 기본 형식의 경로명을 나타냄)
first, last - 경로명을 나타내는 다중 문자 시퀀스를 지정하는 LegacyInputIterator s
타입 요구사항
-
InputIt LegacyInputIterator 요구사항을 충족해야 함.
-
InputIt 의 값 타입은 인코딩된 문자 타입 중 하나여야 함 ( char , wchar_t , char16_t char32_t ).

반환값

* this

예외

메모리 할당이 실패할 경우 std:: bad_alloc 을 던질 수 있습니다.

참고 사항

이 함수들은 p 인자 경로의 의미를 효과적으로 근사화하며, 여기서 * this 가 시작 디렉토리인 환경에서 동작합니다.

예제

출력은 Windows에서 생성됩니다.

#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::path p1 = "C:";
    p1 /= "Users"; // does not insert a separator
    std::cout << "\"C:\" / \"Users\" == " << p1 << '\n';
    p1 /= "batman"; // inserts fs::path::preferred_separator, '\' on Windows
    std::cout << "\"C:\" / \"Users\" / \"batman\" == " << p1 << '\n';
}

가능한 출력:

"C:" / "Users" == "C:Users"
"C:" / "Users" / "batman" == "C:Users\\batman"

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3244 C++17 Source path 가 될 수 없다는 제약 조건이 누락됨 추가됨

참고 항목

디렉토리 구분자를 추가하지 않고 두 경로를 연결합니다
(public member function)
(C++17)
디렉토리 구분자와 함께 두 경로를 연결합니다
(function)