std::experimental::filesystem::canonical
Von cppreference.com
< cpp | experimental | fs
| Definiert im Header <experimental/filesystem> |
||
| path canonical( const path& p, const path& base = current_path() ); |
(1) | (Dateisystem-TS) |
| path canonical( const path& p, error_code& ec ); |
(2) | (Dateisystem-TS) |
| path canonical( const path& p, const path& base, error_code& ec ); |
(3) | (Dateisystem-TS) |
Konvertiert den Pfad p in einen kanonischen absoluten Pfad, d.h. einen absoluten Pfad, der keine Punkt- oder Punkt-Punkt-Elemente oder symbolischen Links enthält.
Wenn p kein absoluter Pfad ist, verhält sich die Funktion so, als ob sie zuerst mit absolute(p, base) oder absolute(p) für (2) absolut gemacht wird.
Der Pfad p muss existieren.
Inhalt |
[edit] Parameter
| p | - | ein Pfad, der absolut oder relativ zu base sein kann und ein existierender Pfad sein muss |
| base | - | Basis-Pfad, der verwendet werden soll, falls p relativ ist |
| ec | - | Fehlercode, in dem der Fehlerstatus gespeichert wird |
[edit] Rückgabewert
Ein absoluter Pfad, der auf dieselbe Datei wie absolute(p, base) (oder absolute(p) für (2)) aufgelöst wird.
[edit] Ausnahmen
Die Überladung, die keinen Parameter error_code& nimmt, löst filesystem_error bei zugrundeliegenden Betriebssystem-API-Fehlern aus, konstruiert mit p als erstem Argument, base 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 ihn auf den Fehlercode der Betriebssystem-API, wenn ein Aufruf der Betriebssystem-API fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hatnoexcept-Spezifikation:
noexcept
Diese Funktion ist nach dem POSIX realpath modelliert.
[edit] Beispiel
Führen Sie diesen Code aus
#include <experimental/filesystem> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::path p = fs::path("..") / ".." / "AppData"; std::cout << "Current path is " << fs::current_path() << '\n' << "Canonical path for " << p << " is " << fs::canonical(p) << '\n'; }
Mögliche Ausgabe
Current path is "C:\Users\abcdef\AppData\Local\Temp" Canonical path for "..\..\AppData" is "C:\Users\abcdef\AppData"
[edit] Siehe auch
| repräsentiert einen Pfad (Klasse) | |
| komponiert einen absoluten Pfad konvertiert einen Pfad in einen absoluten Pfad, der das OS-spezifische Verhalten repliziert (Funktion) |