Namespaces
Variants

std::experimental::filesystem:: equivalent

From cppreference.net
Definido en el encabezado <experimental/filesystem>
bool equivalent ( const path & p1, const path & p2 ) ;
bool equivalent ( const path & p1, const path & p2, error_code & ec ) ;
(1) (filesystem TS)

Comprueba si las rutas p1 y p2 se refieren al mismo archivo o directorio y tienen el mismo estado de archivo determinado por status (los enlaces simbólicos son seguidos).

Si p1 o p2 no existe o si su tipo de archivo no es archivo, directorio o enlace simbólico (según lo determinado por is_other ), se reporta un error.

La sobrecarga que no lanza excepciones retorna false en caso de errores.

Contenidos

Parámetros

p1, p2 - rutas a verificar para equivalencia
ec - parámetro de salida para reporte de errores en la sobrecarga no lanzadora

Valor de retorno

true si p1 y p2 se refieren al mismo archivo o directorio y su estado de archivo es el mismo. false en caso contrario.

Excepciones

The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p1 as the first argument, p2 as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept especificación:
noexcept

Notas

Dos rutas se consideran que resuelven a la misma entidad del sistema de archivos si st_dev y st_ino de su estructura POSIX stat , obtenida como si fuera mediante stat de POSIX, son iguales (es decir, los archivos están ubicados en el mismo dispositivo en la misma ubicación).

En particular, todos los enlaces físicos para el mismo archivo o directorio son equivalentes, y un enlace simbólico y su destino en el mismo sistema de archivos son equivalentes.

Ejemplo

#include <cstdint>
#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::filesystem;
int main()
{
    // equivalencia de enlace físico
    fs::path p1 = ".";
    fs::path p2 = fs::current_path();
    if (fs::equivalent(p1, p2))
        std::cout << p1 << " is equivalent to " << p2 << '\n';
    // equivalencia de enlace simbólico
    fs::path p3 = "/lib/libc.so.6";
    fs::path p4 = p3.parent_path() / fs::read_symlink(p3);
    if (fs::equivalent(p3, p4))
        std::cout << p3 << " is equivalent to " << p4 << '\n';
}

Salida posible:

"." is equivalent to "/var/tmp/test"
"/lib/libc.so.6" is equivalent to "/lib/libc-2.12.so"

Véase también

determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico
(función)