filesystem
Fügen Sie den Header <filesystem>
für den Zugriff auf Klassen und Funktionen ein, die Informationen zu Pfaden, Dateien und Verzeichnissen bearbeiten und abrufen.
Syntax
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
Wichtig
Bei der Version von Visual Studio 2017 war der <filesystem>
Header noch kein C++-Standard. C++ in Visual Studio 2017 RTW implementiert den endgültigen Entwurfsstandard, der in ISO/IEC JTC 1/SC 22/WG 21 N4100 gefunden wurde. Visual Studio 2017 Version 15.7 und höher unterstützt den neuen C++17-Standard<filesystem>
.
Dies ist eine völlig neue Implementierung, die nicht mit der vorherigen std::experimental
Version kompatibel ist. Es wurde durch die Symlink-Unterstützung, Fehlerkorrekturen und Änderungen im standardmäßig erforderlichen Verhalten erforderlich. In Visual Studio 2019 Version 16.3 und höher, einschließlich <filesystem>
nur der neuen std::filesystem
. Einschließlich <experimental/filesystem>
der alten experimental Implementierung. Die experimental Implementierung wird in der nächsten ABI-veröffentlichung der Bibliotheken entfernt.
Dieser Header unterstützt Dateisysteme für eine von zwei breiten Klassen von Hostbetriebssystemen: Microsoft Windows und POSIX.
Der überwiegende Teil der Funktionalität ist für beide Betriebssysteme gleich. In diesem Dokuments sind die Unterschiede aufgeführt. Beispiel:
Windows unterstützt mehrere Stammnamen, z
c:
. B. oder\\network_name
. Ein Dateisystem besteht aus einer Gesamtstruktur von Bäumen, jede mit einem eigenen Stammverzeichnis, zc:\
. B. oder\\network_name\
, und jeder mit einem eigenen aktuellen Verzeichnis, um einen relativen Pfadnamen abzuschließen (einer, der kein absoluter Pfadname ist).POSIX unterstützt eine einzelne Struktur ohne Stammnamen, das einzelne Stammverzeichnis
/
und ein einzelnes aktuelles Verzeichnis.
Ein weiterer wichtiger Unterschied ist die systemeigene Darstellung von Pfadnamen:
Windows verwendet eine null-beendete Sequenz von
wchar_t
, codiert als UTF-16 (ein oder mehrere Elemente für jeden charAkter).POSIX verwendet eine null-beendete Sequenz von
char
, codiert als UTF-8 (ein oder mehrere Elemente für jeden charAkter).Ein Objekt der Klasse
path
speichert den Pfadnamen in nativem Formular, unterstützt jedoch die einfache Konvertierung zwischen diesem gespeicherten Formular und mehreren externen Formularen:Eine null-beendete Sequenz von
char
, codiert als favorisiert durch das Betriebssystem.Eine null-beendete Sequenz von
char
, codiert als UTF-8.Eine null-beendete Sequenz von
wchar_t
, codiert als favorisiert durch das Betriebssystem.Eine null-beendete Sequenz von
char16_t
, codiert als UTF-16.Eine null-beendete Sequenz von
char32_t
, codiert als UTF-32.
Gegenseitige Konvertierungen zwischen diesen Darstellungen werden nach Bedarf dadurch vermittelt, dass mindestens ein
codecvt
-Facet verwendet wird. Wenn kein bestimmtes Gebietsschema angegeben wird, werden diese Facetten aus dem globalen Gebietsschema abgerufen.
Ein weiterer Unterschied ist das Detail, über das das jeweilige Betriebssystem Ihnen die Möglichkeit gibt, Datei- oder Verzeichniszugriffsberechtigungen anzugeben:
Windows Datensätze auf, ob eine Datei schreibgeschützt oder schreibbar ist, ein Attribut, das keine Bedeutung für Verzeichnisse hat.
POSIX erfasst, ob eine Datei gelesen, geschrieben oder ausgeführt werden kann (gescannt, wenn ein Verzeichnis). Und ob jeder Vorgang für den Besitzer, die Gruppe des Besitzers oder für alle zulässig ist, sowie einige andere Berechtigungen.
Beiden Systemen gemeinsam ist die Struktur, die für einen Pfadnamen gilt, sobald Sie über den Stammnamen hinausgelangen. Für den Pfadnamen c:/abc/xyz/def.ext
:
Der Stammname ist
c:
.Das Stammverzeichnis ist
/
.Der Stammpfad ist
c:/
.Der relative Pfad ist
abc/xyz/def.ext
.Der übergeordnete Pfad ist
c:/abc/xyz
.Der Dateiname ist
def.ext
.Der Stamm ist
def
.Die Erweiterung ist
.ext
.
Ein kleiner Unterschied ist das bevorzugte Trennzeichen zwischen der Sequenz von Verzeichnissen in einem Pfadnamen. Beide Betriebssysteme ermöglichen es Ihnen, einen /
schrägen Schrägstrich zu schreiben, aber in einigen Kontexten Windows bevorzugt einen Backslash\
. Die Implementierung speichert das bevorzugte Trennzeichen im Datenmitglied preferred_separator
in path
.
Schließlich verfügen Objekte über ein wichtiges Feature: Sie können sie verwenden, wenn ein Dateiname-Argument in den klassen erforderlich ist, path
die in der Kopfzeile <fstream>
definiert sind.
Weitere Informationen und Codebeispiele finden Sie unter Dateisystemnavigation (C++).
Member
Klassen
name | Beschreibung |
---|---|
directory_entry -Klasse |
Beschreibt ein Objekt, das von einem oder recursive_directory_iterator einem directory_iterator zurückgegeben wird und eine path . |
directory_iterator -Klasse |
Beschreibt einen Eingabeiterator, der alle Dateinamen in einem Dateisystemverzeichnis durchläuft. |
filesystem_error -Klasse |
Eine Basisklasse für Ausnahmen, die ausgelöst werden, um einen Systemüberlauf auf niedriger Ebene zu melden. |
path -Klasse |
Definiert eine Klasse, die ein für die Verwendung als Dateiname geeignetes Objekt des Vorlagentyps String speichert. |
recursive_directory_iterator -Klasse |
Beschreibt einen Eingabeiterator, der alle Dateinamen in einem Dateisystemverzeichnis durchläuft. Der Iterator kann die Verzeichnisse auch absteigend anordnen. |
file_status -Klasse |
Bricht ein file_type um. |
Strukturen
Name | Beschreibung |
---|---|
space_info -Struktur |
Enthält Informationen zu einem Volume. |
Functions
Operatoren
Enumerationen
Name | Beschreibung |
---|---|
copy_options |
Eine mit copy_file verwendete Enumeration, mit der das Verhalten bestimmt wird, wenn eine Datei vorhanden ist. |
directory_options |
Eine Enumeration, die Optionen für Verzeichnisiteratoren angibt. |
file_type |
Eine Enumeration für Dateitypen. |
perm_options |
Aufzähloptionen für die permissions Funktion. |
perms |
Ein Bitmaskentyp, mit dem Berechtigungen und Optionen zu Berechtigungen übermittelt werden. |