std::filesystem::path::append, std::filesystem::path::operator/= - cppreference.com
De cppreference.com
|
|
(1) | (desde C++17) |
|
|
(2) | (desde C++17) |
|
|
(3) | (desde C++17) |
|
|
(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
#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] |