Espacios de nombres
Variantes
Acciones

std::filesystem::relative, std::filesystem::proximate

De cppreference.com
 
 
 
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());
path relative( const std::filesystem::path& p,
               const std::filesystem::path& base,

               std::error_code& ec );
(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());
path proximate( const std::filesystem::path& p,
                const std::filesystem::path& base,

                std::error_code& ec );
(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.

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

1) p hecha relativa frente a base.
2) p hecha aproximada frente a base.

[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) [editar]
(C++17)
Compone una ruta de acceso absoluta.
(función) [editar]
Compone una ruta de acceso canónica.
(función) [editar]