std::filesystem:: equivalent
|
Défini dans l'en-tête
<filesystem>
|
||
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const std:: filesystem :: path & p2 ) ; |
(1) | (depuis C++17) |
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const
std::
filesystem
::
path
&
p2,
|
(2) | (depuis C++17) |
Vérifie si les chemins p1 et p2 résolvent vers la même entité du système de fichiers.
Si soit p1 ou p2 n'existe pas, une erreur est signalée.
La surcharge non levante retourne false en cas d'erreurs.
Table des matières |
Paramètres
| p1, p2 | - | chemins à vérifier pour l'équivalence |
| ec | - | paramètre de sortie pour le rapport d'erreur dans la surcharge non-lançante |
Valeur de retour
true si p1 et p2 font référence au même fichier ou répertoire et que leur statut de fichier est identique. false sinon.
Exceptions
Toute surcharge non marquée
noexcept
peut lever
std::bad_alloc
si l'allocation de mémoire échoue.
Notes
Deux chemins sont considérés comme résolvant vers la même entité du système de fichiers si les deux entités candidates vers lesquelles les chemins se résolvent sont situées sur le même périphérique au même emplacement. Pour POSIX, cela signifie que les membres
st_dev
et
st_ino
de leur
stat
structure
POSIX, obtenus comme s'ils l'étaient par
stat()
POSIX, sont égaux.
En particulier, tous les liens physiques pour le même fichier ou répertoire sont équivalents, et un lien symbolique et sa cible sur le même système de fichiers sont équivalents.
Exemple
#include <cstdint> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { // équivalence de lien physique fs::path p1 = "."; fs::path p2 = fs::current_path(); if (fs::equivalent(p1, p2)) std::cout << p1 << " est équivalent à " << p2 << '\n'; // équivalence de lien symbolique 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 << " est équivalent à " << p2 << '\n'; } }
Sortie possible :
"." 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"
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement tel que publié | Comportement correct |
|---|---|---|---|
| LWG 2937 | C++17 | condition d'erreur spécifiée incorrectement | corrigé |
Voir aussi
|
compare les représentations lexicales de deux chemins lexicographiquement
(fonction membre publique 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)
|
compare lexicographiquement deux chemins
(fonction) |
|
(C++17)
(C++17)
|
détermine les attributs de fichier
détermine les attributs de fichier, en vérifiant la cible du lien symbolique (fonction) |