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:
Sourcees una especialización de std::basic_string o std::basic_string_view, ostd::iterator_traits<std::decay_t<Source>>::value_typees válido y denota una codificación para un tipo carácter, posiblemente calificadoconst(char,char8_t, (desde C++20)char16_t,char32_t, owchar_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
Ejecuta este código
#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) | |
| Concatena dos rutas de acceso con un separador de directorio. (función) |