std::filesystem::path:: lexically_normal, std::filesystem::path:: lexically_relative, std::filesystem::path:: lexically_proximate
|
path lexically_normal
(
)
const
;
|
(1) | (desde C++17) |
|
path lexically_relative
(
const
path
&
base
)
const
;
|
(2) | (desde C++17) |
|
path lexically_proximate
(
const
path
&
base
)
const
;
|
(3) | (desde C++17) |
-
- Primero, si root_name ( ) ! = base. root_name ( ) es true o is_absolute ( ) ! = base. is_absolute ( ) es true o ( ! has_root_directory ( ) && base. has_root_directory ( ) ) es true o cualquier nombre de archivo en relative_path ( ) o base. relative_path ( ) puede interpretarse como un root-name , devuelve un path construido por defecto.
- De lo contrario, primero determina el primer elemento no coincidente de * this y base como si fuera por auto [ a, b ] = mismatch ( begin ( ) , end ( ) , base. begin ( ) , base. end ( ) ) , luego
-
- si a == end ( ) y b == base. end ( ) , devuelve path ( "." ) ,
- de lo contrario, define N como el número de elementos de nombre de archivo no vacíos que no son ni dot ni dot-dot en [ b, base. end ( ) ) , menos el número de elementos de nombre de archivo dot-dot . Si N < 0 , devuelve un path construido por defecto,
- de lo contrario, si N = 0 y a == end ( ) || a - > empty ( ) , devuelve path ( "." ) ,
- de lo contrario devuelve un objeto compuesto por
-
- un path ( ) construido por defecto seguido de
- N aplicaciones de operator / = ( path ( ".." ) ) , seguido de
-
una aplicación de
operator
/
=
para cada elemento en el rango semiabierto
[a,end ( )).
Contenidos |
Parámetros
(ninguno)
Valor de retorno
Excepciones
Puede lanzar excepciones definidas por la implementación.
Notas
Estas conversiones son puramente léxicas. No verifican que las rutas existan, no siguen enlaces simbólicos y no acceden al sistema de archivos en absoluto. Para las contrapartes que siguen enlaces simbólicos de
lexically_relative
y
lexically_proximate
, consulte
relative
y
proximate
.
En Windows, la ruta devuelta
path
tiene barras invertidas (los separadores preferidos).
En POSIX, ningún nombre de archivo en una ruta relativa es aceptable como root-name .
Ejemplo
#include <cassert> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { assert(fs::path("a/./b/..").lexically_normal() == "a/"); assert(fs::path("a/.///b/../").lexically_normal() == "a/"); assert(fs::path("/a/d").lexically_relative("/a/b/c") == "../../d"); assert(fs::path("/a/b/c").lexically_relative("/a/d") == "../b/c"); assert(fs::path("a/b/c").lexically_relative("a") == "b/c"); assert(fs::path("a/b/c").lexically_relative("a/b/c/x/y") == "../.."); assert(fs::path("a/b/c").lexically_relative("a/b/c") == "."); assert(fs::path("a/b").lexically_relative("c/d") == "../../a/b"); assert(fs::path("a/b").lexically_relative("/a/b") == ""); assert(fs::path("a/b").lexically_proximate("/a/b") == "a/b"); }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3070 | C++17 | un nombre de archivo que también puede ser un root-name puede causar resultados sorprendentes | tratado como caso de error |
| LWG 3096 | C++17 | el "/" final y "/." se manejan incorrectamente | corregido |
Véase también
|
(C++17)
|
compone una ruta relativa
(función) |