std::experimental::filesystem::equivalent
| 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[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) |