std::filesystem::relative, std::filesystem::proximate - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++17) |
|
|
(2) | (desde C++17) |
|
|
(3) | (desde C++17) |
|
|
(4) | (desde C++17) |
1) Devuelve relative(p, current_path(), ec).
2) Devuelve p hecha relativa a base. Resuelve los enlaces simbólicos y normaliza tanto p como base antes de otro procesamiento. Efectivamente devuelve weakly_canonical(p).lexically_relative(weakly_canonical(base)) o weakly_canonical(p, ec).lexically_relative(weakly_canonical(base, ec)), excepto que la forma de código de eror devuelve path() a la primera ocurrencia de un error, si los hay.
3) Devuelve proximate(p, current_path(), ec)
4) Efectivamente devuelve weakly_canonical(p).lexically_proximate(weakly_canonical(base)) o weakly_canonical(p, ec).lexically_proximate(weakly_canonical(base, ec)), excepto que la forma de código de eror devuelve path() a la primera ocurrencia de un error, si los hay.
Parámetros
| p | - | Una ruta de acceso existente. |
| base | - | La ruta de acceso base, frente a la que p se hará relativa o aproximada. |
| ec | - | El código de error en el que almacenar el estado de error. |
Valor de retorno
1) p hecha relativa frente a base.
2) p hecha aproximada frente a base.
Excepciones
La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con p como el primer argumento de la ruta de acceso, base como el segundo argumento de la ruta de acceso, y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.
Ejemplo
#include <iostream> #include <filesystem> void mostrar(std::filesystem::path a, std::filesystem::path b) { std::cout << "relative(" << a << "," << b << ") == "; std::cout << std::filesystem::relative(a,b) << "\n"; std::cout << "proximate(" << a << "," << b << ") == "; std::cout << std::filesystem::proximate(a,b) << "\n"; } int main() { mostrar("/a/b/c","/a/b"); mostrar("/a/c","/a/b"); mostrar("c","/a/b"); mostrar("/a/b","c"); }
Posible salida:
relative("/a/b/c","/a/b") == "c"
proximate("/a/b/c","/a/b") == "c"
relative("/a/c","/a/b") == "../c"
proximate("/a/c","/a/b") == "../c"
relative("c","/a/b") == ""
proximate("c","/a/b") == "c"
relative("/a/b","c") == ""
proximate("/a/b","c") == "/a/b"