std::filesystem::relative, std::filesystem::proximate
Definido en el archivo de encabezado <filesystem>
|
||
path relative( const std::filesystem::path& p, std::error_code& ec ); |
(1) | (desde C++17) |
path relative( const std::filesystem::path& p, const std::filesystem::path& base = std::filesystem::current_path()); |
(2) | (desde C++17) |
path proximate( const std::filesystem::path& p, std::error_code& ec ); |
(3) | (desde C++17) |
path proximate( const std::filesystem::path& p, const std::filesystem::path& base = std::filesystem::current_path()); |
(4) | (desde C++17) |
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.Contenido |
[editar] 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. |
[editar] Valor de retorno
[editar] 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.
[editar] 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"
[editar] Véase también
(C++17) |
Representa una ruta de acceso. (clase) |
(C++17) |
Compone una ruta de acceso absoluta. (función) |
(C++17) |
Compone una ruta de acceso canónica. (función) |