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 、ヌル終端マルチ文字列、またはヌル終端マルチ文字シーケンスを指す入力イテレータを受け入れます。 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 のペア
型要件
-
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 であってはならないという制約が欠落していた 追加された

関連項目

2つのパスをディレクトリ区切り文字を挿入せずに連結する
(公開メンバ関数)
(C++17)
2つのパスをディレクトリ区切り文字で連結する
(関数)