Namespaces
Variants

std::experimental::filesystem:: equivalent

From cppreference.net
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 ` `, `
`, `` ou des termes C++ spécifiques à traduire, la sortie reste identique à l'entrée.*
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 spécification :
noexcept

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)