Namensräume
Varianten
Aktionen

std::filesystem::path

Von cppreference.com
 
 
 
 
Definiert in Header <filesystem>
class path;
(seit C++17)

Objekte vom Typ path repräsentieren Pfade in einem Dateisystem. Nur syntaktische Aspekte von Pfaden werden behandelt: Der Pfadname kann einen nicht existierenden Pfad darstellen oder sogar einen, der auf dem aktuellen Dateisystem oder Betriebssystem nicht existieren darf.

Der Pfadname hat die folgende Syntax

  1. root-name(optional): identifiziert die Wurzel in einem Dateisystem mit mehreren Wurzeln (wie "C:" oder "//myserver"). Bei Mehrdeutigkeit wird die längste Zeichensequenz, die einen gültigen root-name bildet, als root-name behandelt. Die Standardbibliothek kann zusätzliche Root-Namen definieren, die über die vom Betriebssystem-API verstandenen hinausgehen.
  2. root-directory(optional): ein Verzeichnistrenner, der, wenn vorhanden, diesen Pfad als absolut markiert. Wenn er fehlt (und das erste Element außer dem Root-Namen ein Dateiname ist), dann ist der Pfad relativ und erfordert einen anderen Pfad als Startposition, um zu einem Dateinamen aufgelöst zu werden.
  3. Null oder mehr der folgenden
  • file-name: Sequenz von Zeichen, die keine Verzeichnistrenner oder bevorzugten Verzeichnistrenner sind (zusätzliche Einschränkungen können vom Betriebssystem oder Dateisystem auferlegt werden). Dieser Name kann eine Datei, einen Hardlink, einen symbolischen Link oder ein Verzeichnis identifizieren. Zwei spezielle file-names werden erkannt
  • dot: Der Dateiname, der aus einem einzelnen Punktzeichen . besteht, ist ein Verzeichnisname, der auf das aktuelle Verzeichnis verweist.
  • dot-dot: Der Dateiname, der aus zwei Punktzeichen .. besteht, ist ein Verzeichnisname, der auf das übergeordnete Verzeichnis verweist.
  • directory-separators: Das Zeichen Schrägstrich / oder das als path::preferred_separator bereitgestellte alternative Zeichen. Wenn dieses Zeichen wiederholt wird, wird es als einzelner Verzeichnistrenner behandelt: /usr///////lib ist dasselbe wie /usr/lib.

Ein Pfad kann durch Befolgen dieses Algorithmus normalisiert werden

  1. Wenn der Pfad leer ist, stoppen (die Normalform eines leeren Pfads ist ein leerer Pfad).
  2. Ersetzen Sie jeden directory-separator (der aus mehreren Schrägstrichen bestehen kann) durch einen einzelnen path::preferred_separator.
  3. Ersetzen Sie jedes Schrägstrichzeichen im root-name durch path::preferred_separator.
  4. Entfernen Sie jeden dot und jeden unmittelbar folgenden directory-separator.
  5. Entfernen Sie jeden Nicht-dot-dot-Dateinamen, der unmittelbar von einem directory-separator und einem dot-dot gefolgt wird, zusammen mit allen unmittelbar folgenden directory-separatorn.
  6. Wenn ein root-directory vorhanden ist, entfernen Sie alle dot-dots und alle unmittelbar folgenden directory-separator.
  7. Wenn der letzte Dateiname dot-dot ist, entfernen Sie alle nachfolgenden directory-separator.
  8. Wenn der Pfad leer ist, fügen Sie einen dot hinzu (Normalform von ./ ist .).

Der Pfad kann elementweise über Iteratoren durchlaufen werden, die von den Funktionen begin() und end() zurückgegeben werden. Diese stellen den Pfad im generischen Format dar und iterieren über Root-Name, Root-Verzeichnis und die nachfolgenden Dateinamen-Elemente (Verzeichnistrenner werden übersprungen, außer dem, der das Root-Verzeichnis identifiziert). Wenn das letzte Element im Pfad ein Verzeichnistrenner ist, dereferenziert der letzte Iterator auf ein leeres Element.

Der Aufruf einer nicht-const-Memberfunktion eines path macht alle Iteratoren ungültig, die auf Elemente dieses Objekts verweisen.

Wenn das Betriebssystem eine native Syntax verwendet, die sich von der portablen generischen Syntax unterscheidet, akzeptieren Bibliotheksfunktionen, die "erkanntes Format" akzeptieren, Pfadnamen in beiden Formaten: Ein Argument im erkannten Format wird nur dann als im generischen Format befindlich betrachtet, wenn es dem generischen Format entspricht, aber vom Betriebssystem nicht als nativer Pfad akzeptiert wird. Auf Betriebssystemen, bei denen das native Format zwischen Verzeichnispfaden und Dateipfaden unterschiedlich ist, wird ein generischer Pfadname als Verzeichnispfad behandelt, wenn er auf einem Verzeichnistrenner endet, andernfalls als reguläre Datei.

In jedem Fall verhält sich die Pfadklasse so, als würde sie einen Pfadnamen im nativen Format speichern und bei Bedarf automatisch in das generische Format konvertieren (jede Memberfunktion gibt an, welches Format sie für den Pfad interpretiert).

Auf POSIX-Systemen ist das generische Format das native Format, und es besteht keine Notwendigkeit, zwischen ihnen zu unterscheiden oder sie zu konvertieren.

Pfade sind implizit konvertierbar zu und von std::basic_strings, was ihre Verwendung mit anderen Dateischnittstellen ermöglicht.

Die Stream-Operatoren verwenden std::quoted, damit Leerzeichen beim späteren Lesen durch den Stream-Eingabeoperator keine Abschneidung verursachen.

Memberfunktionen zur Dekomposition (z. B. extension) geben filesystem::path-Objekte anstelle von String-Objekten zurück, wie es andere APIs tun.

Inhalt

[edit] Member-Typen

Typ Definition
value_type Zeichentyp, der von der nativen Kodierung des Dateisystems verwendet wird: char unter POSIX, wchar_t unter Windows
string_type std::basic_string<value_type>
const_iterator ein konstanter LegacyInputIterator mit einem value_type von path, der alle Anforderungen von LegacyBidirectionalIterator erfüllt, mit der Ausnahme, dass für zwei gleichwertige dereferenzierbare Iteratoren a und b vom Typ const_iterator keine Anforderung besteht, dass *a und *b dasselbe Objekt referenzieren.

Es ist nicht spezifiziert, ob const_iterator tatsächlich ein LegacyBidirectionalIterator ist

iterator const_iterator
bestimmt, wie Zeichenkettenrepräsentationen von Pfadnamen zu interpretieren sind.

Die folgenden Enumeratoren sind ebenfalls definiert

Name Erklärung
native_format nativers Pfadnamen-Format
generic_format generisches Pfadnamen-Format
auto_format implementierungsdefiniertes Format, wo möglich automatisch erkannt

(public member enum)

[edit] Member-Konstanten

constexpr value_type preferred_separator
[static]
alternativer Verzeichnistrenner, der zusätzlich zum portablen / verwendet werden kann. Unter Windows ist dies das umgekehrte Schrägstrichzeichen \. Unter POSIX ist dies derselbe Schrägstrich / wie der portable Trenner
(public static member constant) [edit]

[edit] Memberfunktionen

konstruiert einen path
(public member function) [edit]
zerstört ein path-Objekt
(public member function) [edit]
weist einen anderen Pfad zu
(public member function) [edit]
weist Inhalte zu
(public member function) [edit]
Verkettung
hängt Elemente mit einem Verzeichnistrenner an den Pfad an
(public member function) [edit]
verkettet zwei Pfade ohne Einführung eines Verzeichnistrenners
(public member function) [edit]
Modifizierer
löscht den Inhalt
(public member function) [edit]
konvertiert Verzeichnistrenner in bevorzugte Verzeichnistrenner
(public member function) [edit]
entfernt die Dateinamen-Pfadkomponente
(public member function) [edit]
ersetzt die letzte Pfadkomponente durch einen anderen Pfad
(public member function) [edit]
ersetzt die Dateiendung
(public member function) [edit]
tauscht zwei Pfade
(public member function) [edit]
Format-Observer
gibt die native Version des Pfades zurück
(public member function) [edit]
gibt den Pfad im nativen Pfadnamen-Format als String zurück
(public member function) [edit]
gibt den Pfad im generischen Pfadnamen-Format als String zurück
(public member function) [edit]
Compare
vergleicht die lexikalischen Darstellungen zweier Pfade lexikographisch
(public member function) [edit]
Generierung
konvertiert den Pfad in die Normalform
konvertiert den Pfad in die relative Form
konvertiert den Pfad in die proximate Form
(public member function) [edit]
Dekomposition
gibt den Root-Namen des Pfades zurück, falls vorhanden
(public member function) [edit]
gibt das Root-Verzeichnis des Pfades zurück, falls vorhanden
(public member function) [edit]
gibt den Root-Pfad des Pfades zurück, falls vorhanden
(public member function) [edit]
gibt den Pfad relativ zum Root-Pfad zurück
(public member function) [edit]
gibt den Pfad des übergeordneten Pfades zurück
(public member function) [edit]
gibt die Dateinamen-Pfadkomponente zurück
(public member function) [edit]
gibt die Stem-Pfadkomponente zurück (Dateiname ohne die finale Endung)
(public member function) [edit]
gibt die Dateiendungs-Pfadkomponente zurück
(public member function) [edit]
Abfragen
prüft, ob der Pfad leer ist
(public member function) [edit]
prüft, ob das entsprechende Pfadelement nicht leer ist
(public member function) [edit]
prüft, ob root_path() den Speicherort im Dateisystem eindeutig identifiziert
(public member function) [edit]
Iteratoren
Iterator-Zugriff auf den Pfad als Sequenz von Elementen
(public member function) [edit]

[edit] Nicht-Member-Funktionen

Definiert im Namespace std::filesystem
spezialisiert den Algorithmus std::swap
(Funktion) [edit]
berechnet einen Hashwert für ein Pfadobjekt
(function) [edit]
(C++17)(C++17)(bis C++20)(C++17)(bis C++20)(C++17)(bis C++20)(C++17)(bis C++20)(C++17)(bis C++20)(C++20)
vergleicht zwei Pfade lexikographisch
(function) [edit]
(C++17)
verkettet zwei Pfade mit einem Verzeichnistrenner
(function) [edit]
führt Stream-Ein- und Ausgabe für einen gequoteten Pfad durch
(function) [edit]
(C++17)(veraltet in C++20)
erstellt einen path aus einer UTF-8-kodierten Quelle
(Funktion) [bearbeiten]

[edit] Hilfsklassen

Definiert im Namespace std
Hash-Unterstützung für std::filesystem::path
(Klassentemplate-Spezialisierung) [bearbeiten]
Formatierungsunterstützung für filesystem::path
(class template specialization) [edit]

[edit] 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 3657 C++17 hash für path wurde deaktiviert aktiviert