kennen:include:filesystem
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | kennen:include:filesystem [2020-01-04 16:37] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== < | ||
+ | Diese Bibliothek erlaubt weitgehend systemunabhängigen Zugriff auf das Dateisystem. | ||
+ | Für eine umfassende, detailliertere Beschreibung siehe [[cppref> | ||
+ | Hier folgen eher Anwendungsbeispiele. | ||
+ | ===== Einbinden ===== | ||
+ | Vor der Integration in C++17 wurde zunächst Filesystem TS veröffentlicht. | ||
+ | Notfalls kann auf diese Version zurückgegriffen werden: | ||
+ | <code cpp> | ||
+ | #if __has_include(< | ||
+ | #include < | ||
+ | namespace fs = std:: | ||
+ | #elif __has_include(< | ||
+ | #include < | ||
+ | namespace fs = std:: | ||
+ | // g++ : link with -lstdc++fs | ||
+ | #else | ||
+ | #error No filesystem library. | ||
+ | #endif | ||
+ | </ | ||
+ | |||
+ | ===== Pfade ===== | ||
+ | Ein Pfad '' | ||
+ | Er besteht aus | ||
+ | * einem optionalen '' | ||
+ | * einem optionalen '' | ||
+ | * und weiteren Namen, die --- bis auf den letzten --- Namen von Verzeichnissen sein müssen. | ||
+ | |||
+ | Dabei sind Verzeichnisse ebenfalls Dateien, auch '' | ||
+ | Als Pfadtrenner sind sowohl ''/'' | ||
+ | Der Dateiname '' | ||
+ | |||
+ | Wurzelverzeichnis | ||
+ | v Dateiname | ||
+ | E:/ | ||
+ | / ~~~~~~~~~~~~~ ------- ~~~ | ||
+ | LW Relativpfad | ||
+ | |||
+ | Über die Bestandteile eines Pfades kann iteriert werden. | ||
+ | <code cpp> | ||
+ | for (const auto& e : fs:: | ||
+ | std::cout << e << ' '; | ||
+ | </ | ||
+ | Die Ausgaben erscheinen als " | ||
+ | " | ||
+ | |||
+ | ==== Berechtigungen ==== | ||
+ | Dateien und Verzeichnisse können nur von bestimmten Nutzern gelesen, geschrieben und ausgeführt werden. | ||
+ | Diese Berechtigungen lassen sich in einer kurzen Zeichenkette zusammenfassen | ||
+ | (hier ohne '' | ||
+ | <code cpp> | ||
+ | auto perm_string(fs:: | ||
+ | { | ||
+ | auto table = | ||
+ | { std::pair | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | {fs:: | ||
+ | }; | ||
+ | auto sign = [p] (auto flag, const char s[]) { return s[(p & flag) != fs:: | ||
+ | std:: | ||
+ | for (auto&& | ||
+ | return os.str(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Dateieigenschaften abfragen ==== | ||
+ | Für einen vorgegebenen Pfad lassen sich alle Eigenschaften anzeigen: | ||
+ | <code cpp> | ||
+ | void show(fs:: | ||
+ | { | ||
+ | if (!fs:: | ||
+ | { | ||
+ | std::cout << path << " file does not exist\n"; | ||
+ | return; | ||
+ | } | ||
+ | auto perms = perm_string(fs:: | ||
+ | using clock = std:: | ||
+ | auto time = clock:: | ||
+ | auto timestr = std:: | ||
+ | timestr.pop_back(); | ||
+ | std::cout << (fs:: | ||
+ | << (fs:: | ||
+ | << path << ' | ||
+ | } | ||
+ | |||
+ | void ls() | ||
+ | { | ||
+ | auto p = fs:: | ||
+ | show(p); | ||
+ | for (auto&& | ||
+ | show(entry); | ||
+ | } | ||
+ | </ | ||
+ | Mit einem '' | ||
+ | mit '' | ||
+ | Ein [[https:// | ||
+ | < | ||
+ | drwx------ Mon Feb 5 00:26:47 2018 "/ | ||
+ | | ||
+ | | ||
+ | ===== Dateiarbeit ===== | ||
+ | |||
+ | ==== Verzeichnisse anlegen ==== | ||
+ | <code cpp> | ||
+ | void create() | ||
+ | { | ||
+ | fs:: | ||
+ | std:: | ||
+ | std:: | ||
+ | } | ||
+ | </ | ||
+ | ==== kopieren ==== | ||
+ | <code cpp> | ||
+ | void copy() | ||
+ | { | ||
+ | fs:: | ||
+ | fs:: | ||
+ | fs:: | ||
+ | fs:: | ||
+ | fs:: | ||
+ | fs:: | ||
+ | } | ||
+ | </ | ||
+ | ==== löschen ==== | ||
+ | <code cpp> | ||
+ | void destroy() | ||
+ | { | ||
+ | fs:: | ||
+ | fs:: | ||
+ | fs:: | ||
+ | } | ||
+ | </ | ||
+ | ==== Ausnahmen und Fehlerbehandlung ==== | ||
+ | Im Fehlerfall können die Funktionen eine Ausnahme vom Typ '' | ||
+ | Zu allen Funktionen und Methoden exstieren Varianten, | ||
+ | die Fehler über eine '' | ||
+ | als zusätzlichen, | ||
+ | |||
kennen/include/filesystem.txt · Zuletzt geändert: 2020-01-04 16:37 von 127.0.0.1