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, или input iterator, указывающий на null-terminated multicharacter sequence. Эквивалентно return operator / = ( path ( source ) ) ; .
4) То же, что и (1) , но принимает любую пару итераторов, обозначающую многобайтовую строку. Эквивалентно return operator / = ( path ( first, last ) ) ; .

(2) и (3) участвуют в разрешении перегрузки только если Source и path не являются одним и тем же типом, и выполняется одно из условий:

  • Source является специализацией std::basic_string или std::basic_string_view , или
  • std:: iterator_traits < std:: decay_t < Source >> :: value_type является валидным и обозначает возможно const-квалифицированный символьный тип кодировки ( char , char8_t , (начиная с C++20) char16_t , char32_t , или wchar_t ).

Содержание

Параметры

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 Applied to Behavior as published Correct behavior
LWG 3244 C++17 ограничение, что Source не может быть path отсутствовало добавлено

Смотрите также

объединяет два пути без добавления разделителя директорий
(публичная функция-член)
(C++17)
объединяет два пути с разделителем директорий
(функция)