Namensräume
Varianten
Aktionen

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 hat
noexcept-Spezifikation:  
noexcept
  

Diese Funktion ist nach dem POSIX realpath modelliert.

[edit] Beispiel

#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) [bearbeiten]
komponiert einen absoluten Pfad
konvertiert einen Pfad in einen absoluten Pfad, der das OS-spezifische Verhalten repliziert
(Funktion) [bearbeiten]