Namensräume
Varianten
Aktionen

std::experimental::filesystem::equivalent

Von cppreference.com
< cpp‎ | experimental‎ | fs
 
 
 
 
Definiert im Header <experimental/filesystem>
bool equivalent( const path& p1, const path& p2 );
bool equivalent( const path& p1, const path& p2, error_code& ec );
(1) (Dateisystem-TS)

Prüft, ob die Pfade p1 und p2 auf dieselbe Datei oder dasselbe Verzeichnis verweisen und denselben Dateistatus haben, wie er durch status bestimmt wird (symbolische Links werden verfolgt).

Wenn p1 oder p2 nicht existiert oder ihr Dateityp weder Datei, Verzeichnis noch symbolischer Link ist (wie durch is_other bestimmt), wird ein Fehler gemeldet.

Die nicht werfende Überladung gibt bei Fehlern false zurück.

Inhalt

[edit] Parameter

p1, p2 - zu prüfende Pfade auf Gleichheit
ec - Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung

[edit] Rückgabewert

true, wenn p1 und p2 auf dieselbe Datei oder dasselbe Verzeichnis verweisen und ihr Dateistatus derselbe ist. Andernfalls false.

[edit] Ausnahmen

Die Überladung, die keinen Parameter error_code& nimmt, löst filesystem_error bei zugrundeliegenden Betriebssystem-API-Fehlern aus, konstruiert mit p1 als erstem Argument, p2 als zweitem Argument und dem Betriebssystem-Fehlercode als Fehlercode-Argument. std::bad_alloc kann ausgelöst werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung, die einen Parameter error_code& nimmt, setzt diesen auf den Betriebssystem-API-Fehlercode, wenn ein Betriebssystem-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hat
noexcept-Spezifikation:  
noexcept
  

[edit] Hinweise

Zwei Pfade werden als identische Dateisystemobjekte betrachtet, wenn st_dev und st_ino ihrer POSIX stat-Struktur, die wie durch POSIX stat erhalten werden, gleich sind (d.h. die Dateien befinden sich auf demselben Gerät an derselben Stelle).

Insbesondere sind alle harten Links für dieselbe Datei oder dasselbe Verzeichnis äquivalent, und ein symbolischer Link und sein Ziel auf demselben Dateisystem sind äquivalent.

[edit] Beispiel

#include <cstdint>
#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::filesystem;
 
int main()
{
    // hard link equivalency
    fs::path p1 = ".";
    fs::path p2 = fs::current_path();
    if (fs::equivalent(p1, p2))
        std::cout << p1 << " is equivalent to " << p2 << '\n';
 
    // symlink equivalency
    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';
}

Mögliche Ausgabe

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

[edit] Siehe auch

ermittelt Dateiattribute
ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird
(Funktion) [bearbeiten]