Espacios de nombres
Variantes

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

De cppreference.com
 
 
 
 
<tbody> </tbody>
path& operator/=( const path& p );
(1) (desde C++17)
template< class Source > path& operator/=( const Source& source );
(2) (desde C++17)
template< class Source > path& append( const Source& source );
(3) (desde C++17)
template< class InputIt > path& append( InputIt first, InputIt last );
(4) (desde C++17)
1) Si p.is_absolute() || (p.has_root_name() && p.root_name() != root_name()), entonces reemplaza la ruta de acceso actual con p como si fuera por operator=(p) y termina.
* De lo contrario, si p.has_root_directory(), entonces elimina cualquier directorio raíz y toda la ruta de acceso relativa del formato genérico del nombre de ruta de acceso de *this.
* De lo contrario, si has_filename() || (!has_root_directory() && is_absolute()), entonces añade path::preferred_separator al formato genérico de *this.
* De cualquier manera, entonces añade el formato nativo del nombre de ruta de acceso de p, omitiendo cualquier nombre-raíz de su formato genérico, al formato nativo de *this.
// donde "//host" es un nombre-raíz
path("//host")  / "foo" // el resultado es      "//host/foo" (añade con separador)
path("//host/") / "foo" // el resultado es also "//host/foo" (añade sin separador)

// En POSIX,
path("foo") / ""      // el resultado es "foo/" (añade)
path("foo") / "/bar"; // el resultado es "/bar" (reemplaza)

// En Windows,
path("foo") / "C:/bar";  // el resultado es "C:/bar" (reemplaza)
path("foo") / "C:";      // el resultado es "C:"     (reemplaza)
path("C:") / "";         // el resultado es "C:"     (añade, sin separador)
path("C:foo") / "/bar";  // produce "C:/bar"         (elimina la ruta relativa, entonces añade)
path("C:foo") / "C:bar"; // produce "C:foo/bar"      (añade, omitiendo el nombre-raíz de p)
2,3) Igual que (1), pero acepta cualquier std::basic_string, std::basic_string_view, cadena multicarácter terminada en nulo, o un iterador de entrada que apunta a una secuencia multicarácter terminada en nulo. Es equivalente a return operator/=(path(source));.
4) Igual que (1), pero acepta cualquier par de iteradores que designe una cadena multicarácter. Es equivalente a return operator/=(path(first, last));

(2) y (3) participan en la resolución de sobrecargas solo si Source y path no son el mismo tipo, y ya sea que:

  • Source es una especialización de std::basic_string o std::basic_string_view, o
  • std::iterator_traits<std::decay_t<Source>>::value_type es válido y denota una codificación para un tipo carácter, posiblemente calificado const (char, char8_t, (desde C++20)char16_t, char32_t, o wchar_t).

Parámetros

p - El nombre de ruta de acceso a añadir.
source - std::basic_string, std::basic_string_view, cadena multicarácter terminada en nulo, o un iterador de entrada que apunta a una secuencia multicarácter terminada en nulo, que representa un nombre de ruta (ya sea en formato portátil o nativo).
first, last - Un par de InputIterator que especifican una secuencia multicarácter que representa un nombre de ruta.
Requisitos de tipo
-
InputIt debe satisfacer los requisitos de InputIterator.
-
El tipo valor de InputIt debe ser uno de los tipos carácter codificados (char, wchar_t, char16_t y char32_t).

Valor de retorno

*this

Excepciones

Puede lanzar std::bad_alloc si la asignación de memoria fracasa.

Notas

Estas funciones producen efectivamente una aproximación del significado de la ruta argumento p en un entorno donde *this es el directorio de partida.

Ejemplo

#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
    fs::path p1 = "C:";
    p1 /= "Users"; // no inserta un separador
    std::cout << "\"C:\" / \"Users\" == " << p1 << '\n';
    p1 /= "batman"; // inserta fs::path::preferred_separator, '\' en Windows
    std::cout << "\"C:\" / \"Users\" / \"batman\" == " << p1 << '\n';
}

Posible salida:

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

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3244 C++17 Faltaba la restricción que Source no podía ser de tipo path. Se agregó.

Véase también

Concatena dos rutas de acceso sin introducir un separador de directorio.
(función miembro pública) [editar]
Concatena dos rutas de acceso con un separador de directorio.
(función) [editar]