std::filesystem:: path
|
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:
- 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.
- 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.
- 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_separatorbereitgestellt 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:
- Wenn der Pfad leer ist, stoppen (Normalform eines leeren Pfads ist ein leerer Pfad).
-
Ersetze jedes
directory-separator
(das aus mehreren Schrägstrichen bestehen kann) durch einen einzelnen
path::preferred_separator. -
Ersetze jedes Schrägstrich-Zeichen im
root-name
durch
path::preferred_separator. - Entferne jedes dot und jeden unmittelbar folgenden directory-separator .
- Entferne jeden Nicht- dot-dot -Dateinamen, dem unmittelbar ein directory-separator und ein dot-dot folgen, zusammen mit jedem unmittelbar folgenden directory-separator .
- Wenn ein root-directory vorhanden ist, entferne alle dot-dot s und alle unmittelbar folgenden directory-separator s.
- Wenn der letzte Dateiname dot-dot ist, entferne alle nachgestellten directory-separator s.
- 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
|
||||||||
iterator
|
const_iterator
|
||||||||
|
bestimmt, wie Zeichenkettenrepräsentationen von Pfadnamen interpretiert werden.
Die folgenden Enumeratoren sind ebenfalls definiert:
(ö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
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
|
|
|
(C++17)
|
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) |
|
(C++17)
|
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 |