std::filesystem:: equivalent
|
Definiert im Header
<filesystem>
|
||
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const std:: filesystem :: path & p2 ) ; |
(1) | (seit C++17) |
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const
std::
filesystem
::
path
&
p2,
|
(2) | (seit C++17) |
Überprüft, ob die Pfade p1 und p2 zur selben Dateisystem-Entität aufgelöst werden.
Wenn entweder p1 oder p2 nicht existiert, wird ein Fehler gemeldet.
Die nicht-werfende Überladung gibt bei Fehlern false zurück.
Inhaltsverzeichnis |
Parameter
| p1, p2 | - | Pfade, die auf Äquivalenz geprüft werden sollen |
| ec | - | Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung |
Rückgabewert
true wenn p1 und p2 auf dieselbe Datei oder dasselbe Verzeichnis verweisen und ihr Dateistatus identisch ist. false andernfalls.
Exceptions
Jede Überladung, die nicht als
noexcept
gekennzeichnet ist, kann
std::bad_alloc
auslösen, wenn die Speicherallokation fehlschlägt.
Hinweise
Zwei Pfade werden als identische Dateisystem-Entitäten betrachtet, wenn die beiden Kandidaten-Entitäten, auf die die Pfade verweisen, sich auf demselben Gerät an derselben Position befinden. Für POSIX bedeutet dies, dass die
st_dev
- und
st_ino
-Member ihrer POSIX
stat
-Struktur
, ermittelt wie durch POSIX
stat()
, gleich sind.
Insbesondere sind alle Hardlinks für dieselbe Datei oder dasselbe Verzeichnis äquivalent, und ein Symlink und sein Ziel auf demselben Dateisystem sind äquivalent.
Beispiel
#include <cstdint> #include <filesystem> #include <iostream> namespace fs = std::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 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 << " is equivalent to " << p2 << '\n'; } }
Mögliche Ausgabe:
"." 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"
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2937 | C++17 | Fehlerzustand falsch angegeben | korrigiert |
Siehe auch
|
vergleicht die lexikalischen Darstellungen zweier Pfade lexikographisch
(öffentliche Elementfunktion von
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)
|
vergleicht zwei Pfade lexikographisch
(Funktion) |
|
(C++17)
(C++17)
|
bestimmt Dateiattribute
bestimmt Dateiattribute, überprüft das Symlink-Ziel (Funktion) |