std::experimental::filesystem:: equivalent
|
Défini dans l'en-tête
<experimental/filesystem>
|
||
|
bool
equivalent
(
const
path
&
p1,
const
path
&
p2
)
;
bool equivalent ( const path & p1, const path & p2, error_code & ec ) ; |
(1) | (filesystem TS) |
Vérifie si les chemins p1 et p2 font référence au même fichier ou répertoire et ont le même statut de fichier tel que déterminé par status (les liens symboliques sont suivis).
Si p1 ou p2 n'existe pas ou si leur type de fichier n'est pas fichier, répertoire ou lien symbolique (tel que déterminé par is_other ), 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'erreurs 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
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 *Note: Le texte à traduire était uniquement contenu dans les balises HTML qui doivent être préservées. Comme il n'y avait pas de texte en dehors des balises `
`, `
`, `
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
Notes
Deux chemins sont considérés comme résolvant vers la même entité du système de fichiers si
st_dev
et
st_ino
de leur structure POSIX
stat
, obtenue comme si par la fonction POSIX
stat
, sont égaux (ce qui signifie que les fichiers sont situés sur le même périphérique au même emplacement).
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 <experimental/filesystem> #include <iostream> namespace fs = std::experimental::filesystem; int main() { // équivalence des liens physiques fs::path p1 = "."; fs::path p2 = fs::current_path(); if (fs::equivalent(p1, p2)) std::cout << p1 << " est équivalent à " << p2 << '\n'; // équivalence des liens symboliques 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 << " est équivalent à " << p4 << '\n'; }
Sortie possible :
"." est équivalent à "/var/tmp/test" "/lib/libc.so.6" est équivalent à "/lib/libc-2.12.so"
Voir aussi
|
détermine les attributs de fichier
détermine les attributs de fichier, en vérifiant la cible du lien symbolique (fonction) |