std::filesystem:: equivalent
|
Definido en el encabezado
<filesystem>
|
||
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const std:: filesystem :: path & p2 ) ; |
(1) | (desde C++17) |
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const
std::
filesystem
::
path
&
p2,
|
(2) | (desde C++17) |
Comprueba si las rutas p1 y p2 se resuelven en la misma entidad del sistema de archivos.
Si p1 o p2 no existe, 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
Cualquier sobrecarga no marcada como
noexcept
puede lanzar
std::bad_alloc
si la asignación de memoria falla.
Notas
Dos rutas se consideran que resuelven a la misma entidad del sistema de archivos si las dos entidades candidatas a las que resuelven las rutas están ubicadas en el mismo dispositivo en la misma ubicación. Para POSIX, esto significa que los miembros
st_dev
y
st_ino
de su
stat
structure
de POSIX, obtenidos como si fuera mediante
stat()
de POSIX, son iguales.
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 <filesystem> #include <iostream> namespace fs = std::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 << " es equivalente a " << p2 << '\n'; // equivalencia de enlace simbólico for (const fs::path lib : {"/lib/libc.so.6", "/lib/x86_64-linux-gnu/libc.so.6"}) { try { p2 = lib.parent_path() / fs::read_symlink(lib); } catch (std::filesystem::filesystem_error const& ex) { std::cout << ex.what() << '\n'; continue; } if (fs::equivalent(lib, p2)) std::cout << lib << " es equivalente a " << p2 << '\n'; } }
Salida posible:
"." is equivalent to "/var/tmp/test" filesystem error: read_symlink: No such file or directory [/lib/libc.so.6] "/lib/x86_64-linux-gnu/libc.so.6" is equivalent to "/lib/x86_64-linux-gnu/libc-2.23.so"
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2937 | C++17 | condición de error especificada incorrectamente | corregido |
Véase también
|
compara las representaciones léxicas de dos rutas lexicográficamente
(función miembro pública de
std::filesystem::path
)
|
|
|
(C++17)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++20)
|
compara lexicográficamente dos rutas
(función) |
|
(C++17)
(C++17)
|
determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico (función) |