Espacios de nombres
Variantes

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

De cppreference.com
 
 
 
<tbody> </tbody>
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.

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"

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]