Namespaces
Variants

std::filesystem:: path

From cppreference.net
Definiert im 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 im aktuellen Dateisystem oder Betriebssystem nicht existieren darf.

Der Pfadname hat die folgende Syntax:

  1. root-name (optional) : identifiziert das Wurzelverzeichnis in einem Dateisystem mit mehreren Wurzeln (wie "C:" oder "//myserver" ). Bei Mehrdeutigkeit wird die längste Zeichenfolge, die einen gültigen root-name bildet, als root-name behandelt. Die Standardbibliothek kann zusätzliche root-names definieren, die über die vom Betriebssystem-API verstandenen hinausgehen.
  2. root-directory (optional) : ein Verzeichnistrennzeichen, das, falls vorhanden, diesen Pfad als absolut kennzeichnet. Wenn es fehlt (und das erste Element außer dem root-name ein Dateiname ist), dann ist der Pfad relativ und benötigt einen anderen Pfad als Ausgangspunkt, um zu einem Dateinamen aufgelöst zu werden.
  3. Null oder mehr der folgenden Elemente:
  • file-name : Eine Folge von Zeichen, die keine Verzeichnistrennzeichen oder bevorzugte Verzeichnistrennzeichen sind (zusätzliche Einschränkungen können durch das Betriebssystem oder Dateisystem auferlegt werden). Dieser Name kann eine Datei, eine harte Verknüpfung, eine symbolische Verknüpfung oder ein Verzeichnis identifizieren. Zwei spezielle file-name s werden erkannt:
  • dot : Der Dateiname bestehend aus einem einzelnen Punktzeichen . ist ein Verzeichnisname, der auf das aktuelle Verzeichnis verweist.
  • dot-dot : Der Dateiname bestehend aus zwei Punktzeichen .. ist ein Verzeichnisname, der auf das übergeordnete Verzeichnis verweist.
  • directory-separator s: Das Schrägstrich-Zeichen / oder das alternative Zeichen, das als path::preferred_separator bereitgestellt wird. Wenn dieses Zeichen wiederholt wird, wird es als ein einzelnes Verzeichnistrennzeichen behandelt: / usr ///////lib ist dasselbe wie / usr / lib .

Ein Pfad kann durch Befolgen dieses Algorithmus normalisiert werden:

  1. Wenn der Pfad leer ist, stoppen (Normalform eines leeren Pfads ist ein leerer Pfad).
  2. Ersetze jedes directory-separator (das aus mehreren Schrägstrichen bestehen kann) durch einen einzelnen path::preferred_separator .
  3. Ersetze jedes Schrägstrich-Zeichen im root-name durch path::preferred_separator .
  4. Entferne jedes dot und jeden unmittelbar folgenden directory-separator .
  5. Entferne jeden Nicht- dot-dot -Dateinamen, dem unmittelbar ein directory-separator und ein dot-dot folgen, zusammen mit jedem unmittelbar folgenden directory-separator .
  6. Wenn ein root-directory vorhanden ist, entferne alle dot-dot s und alle unmittelbar folgenden directory-separator s.
  7. Wenn der letzte Dateiname dot-dot ist, entferne alle nachgestellten directory-separator s.
  8. Wenn der Pfad leer ist, füge 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 betrachten den Pfad im generischen Format und iterieren über Root-Namen, Root-Verzeichnis und die nachfolgenden Dateinamenelemente (Verzeichnistrennzeichen werden übersprungen, außer demjenigen, das das Root-Verzeichnis identifiziert). Wenn das letzte Element im Pfad ein Verzeichnistrennzeichen ist, dereferenziert der letzte Iterator auf ein leeres Element.

Der Aufruf einer beliebigen nicht-konstanten Memberfunktion eines path invalidiert alle Iteratoren, die auf Elemente dieses Objekts verweisen.

Wenn das Betriebssystem eine native Syntax verwendet, die sich von der oben beschriebenen portablen generic Syntax unterscheidet, akzeptieren Bibliotheksfunktionen, die definiert sind, "detected format" zu akzeptieren, Pfadnamen in beiden Formaten: Ein Argument im detected format wird genau dann als im generic format betrachtet, wenn es dem generic format entspricht, aber vom Betriebssystem nicht als nativer Pfad akzeptiert wird. Auf Betriebssystemen, bei denen sich das native Format zwischen Pfadnamen von Verzeichnissen und Pfadnamen von Dateien unterscheidet, wird ein generischer Pfadname als Verzeichnispfad behandelt, wenn er mit einem Verzeichnisseparator endet, andernfalls als reguläre Datei.

In jedem Fall verhält sich die Path-Klasse so, als ob sie einen Pfadnamen im nativen Format speichert und automatisch bei Bedarf in das generische Format konvertiert (jede Memberfunktion spezifiziert, in welchem Format sie 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_string s, was ihre Verwendung mit anderen Datei-APIs ermöglicht.

Die Stream-Operatoren verwenden std::quoted , sodass Leerzeichen keine Trunkierung verursachen, wenn sie später vom Stream-Eingabeoperator gelesen werden.

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

Inhaltsverzeichnis

Mitgliedertypen

Typ Definition
value_type Zeichentyp, der von der nativen Kodierung des Dateisystems verwendet wird: char auf POSIX, wchar_t auf 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, außer dass für zwei gleiche dereferenzierbare Iteratoren a und b vom Typ const_iterator keine Anforderung besteht, dass * a und * b auf dasselbe Objekt verweisen.

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

iterator const_iterator
bestimmt, wie Zeichenkettenrepräsentationen von Pfadnamen interpretiert werden.

Die folgenden Enumeratoren sind ebenfalls definiert:

Name Erklärung
native_format natives Pfadnamenformat
generic_format generisches Pfadnamenformat
auto_format implementierungsdefiniertes Format, automatisch erkannt wo möglich

(öffentliches Mitglieds-Enum)

Member-Konstanten

constexpr value_type preferred_separator
[static]
Alternativer Verzeichnisseparator, der zusätzlich zum portablen / verwendet werden kann. Unter Windows ist dies der Backslash \ . Unter POSIX ist dies derselbe Schrägstrich / wie der portable Separator
(öffentliche statische Member-Konstante)

Memberfunktionen

**Erläuterungen:** - Die HTML-Tags und Attribute wurden unverändert beibehalten - Die C++-spezifischen Begriffe `begin` und `end` wurden nicht übersetzt - Der Text "iterator access to the path as a sequence of elements" wurde präzise als "Iterator-Zugriff auf den Pfad als eine Sequenz von Elementen" übersetzt - "(public member function)" wurde als "(öffentliche Elementfunktion)" übersetzt - Die Formatierung und Struktur des HTML-Codes bleibt vollständig erhalten
konstruiert einen path
(öffentliche Member-Funktion)
zerstört ein path Objekt
(öffentliche Elementfunktion)
weist einen anderen Pfad zu
(öffentliche Elementfunktion)
weist Inhalte zu
(öffentliche Elementfunktion)
Verkettung
fügt Elemente mit einem Verzeichnistrenner zum Pfad hinzu
(öffentliche Elementfunktion)
verkettet zwei Pfade ohne Einführung eines Verzeichnistrennzeichens
(öffentliche Elementfunktion)
Modifikatoren
löscht den Inhalt
(öffentliche Elementfunktion)
wandelt Verzeichnistrennzeichen in das bevorzugte Verzeichnistrennzeichen um
(öffentliche Elementfunktion)
entfernt den Dateinamen-Pfadbestandteil
(öffentliche Member-Funktion)
ersetzt die letzte Pfadkomponente durch einen anderen Pfad
(öffentliche Elementfunktion)
ersetzt die Erweiterung
(öffentliche Elementfunktion)
tauscht zwei Pfade
(öffentliche Elementfunktion)
Format-Beobachter
gibt die native Version des Pfades zurück
(öffentliche Member-Funktion)
gibt den Pfad im nativen Pfadnamenformat als String zurück
(public member function)
gibt den Pfad im generischen Pfadnamenformat konvertiert in einen String zurück
(öffentliche Elementfunktion)
Vergleichen
vergleicht die lexikalischen Darstellungen zweier Pfade lexikographisch
(öffentliche Elementfunktion)
Generation
wandelt Pfad in Normalform um
wandelt Pfad in relative Form um
wandelt Pfad in proximale Form um
(öffentliche Elementfunktion)
Zerlegung
gibt den Root-Namen des Pfades zurück, falls vorhanden
(öffentliche Member-Funktion)
gibt das Stammverzeichnis des Pfads zurück, falls vorhanden
(öffentliche Elementfunktion)
gibt den Root-Pfad des Pfades zurück, falls vorhanden
(öffentliche Member-Funktion)
gibt den Pfad relativ zum Wurzelpfad zurück
(öffentliche Elementfunktion)
gibt den Pfad des übergeordneten Pfads zurück
(öffentliche Elementfunktion)
gibt die Dateinamen-Pfadkomponente zurück
(öffentliche Elementfunktion)
gibt die Stammkomponente des Pfades zurück (Dateiname ohne die Endung)
(öffentliche Memberfunktion)
gibt die Dateierweiterungskomponente des Pfades zurück
(öffentliche Elementfunktion)
Abfragen
prüft, ob der Pfad leer ist
(öffentliche Elementfunktion)
prüft, ob das entsprechende Pfadelement nicht leer ist
(öffentliche Elementfunktion)
prüft, ob root_path() einen Dateisystemstandort eindeutig identifiziert
(öffentliche Elementfunktion)
Iteratoren
Iterator-Zugriff auf den Pfad als eine Sequenz von Elementen
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

Definiert im Namespace std::filesystem
spezialisiert den std::swap Algorithmus
(Funktion)
(C++17)
berechnet einen Hashwert für ein Pfadobjekt
(Funktion)
(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)
verkettet zwei Pfade mit einem Verzeichnistrennzeichen
(Funktion)
führt Stream-Eingabe und -Ausgabe für einen in Anführungszeichen gesetzten Pfad durch
(Funktion)
(C++17) (deprecated in C++20)
erstellt einen path aus einer UTF-8-kodierten Quelle
(Funktion)

Hilfsklassen

Definiert im Namespace std
Hash-Unterstützung für std::filesystem::path
(Klassen-Template-Spezialisierung)
Formatierungsunterstützung für filesystem::path
(Klassen-Template-Spezialisierung)

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 war deaktiviert aktiviert