std::experimental::filesystem::create_directory, std::experimental::filesystem::create_directories
Von cppreference.com
< cpp | experimental | fs
| Definiert im Header <experimental/filesystem> |
||
| bool create_directory( const path& p ); bool create_directory( const path& p, error_code& ec ); |
(1) | (Dateisystem-TS) |
| bool create_directory( const path& p, const path& existing_p ); bool create_directory( const path& p, const path& existing_p, error_code& ec ); |
(2) | (Dateisystem-TS) |
| bool create_directories( const path& p ); bool create_directories( const path& p, error_code& ec ); |
(3) | (Dateisystem-TS) |
1) Erstellt das Verzeichnis p, als ob durch POSIX mkdir() mit einem zweiten Argument von static_cast<int>(fs::perms::all) (das Elternverzeichnis muss bereits existieren). Wenn p bereits existiert und bereits ein Verzeichnis ist, tut die Funktion nichts (dieser Zustand wird nicht als Fehler behandelt).
2) Wie (1), außer dass die Attribute des neuen Verzeichnisses von existing_p (welches ein existierendes Verzeichnis sein muss) kopiert werden. Welche Attribute kopiert werden, ist vom Betriebssystem abhängig: Auf POSIX-Systemen werden die Attribute kopiert, als ob durchAuf Windows-Betriebssystemen werden die Attribute kopiert, als ob durch
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
3) Führt (1) für jedes Element von p aus, das noch nicht existiert.
Die nicht-werfenden Überladungen geben false zurück, wenn ein Fehler auftritt.
Inhalt |
[bearbeiten] Parameter
| p | - | Der Pfad zum neuen zu erstellenden Verzeichnis |
| existing_p | - | Der Pfad zu einem Verzeichnis, von dem die Attribute kopiert werden sollen |
| ec | - | Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung |
[bearbeiten] Rückgabewert
1,2) true, wenn die Verzeichniserstellung erfolgreich war, andernfalls false.
[bearbeiten] Ausnahmen
1,3) Die Überladung, die keinen error_code&-Parameter akzeptiert, wirft eine filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Argument und dem OS-Fehlercode als Fehlercode-Argument. std::bad_alloc kann geworfen werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung, die einen error_code&-Parameter akzeptiert, setzt diesen auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hat
noexcept-Spezifikation:
noexcept
2) Die Überladung, die keinen error_code&-Parameter akzeptiert, wirft eine filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Argument, existing_p als zweitem Argument und dem OS-Fehlercode als Fehlercode-Argument. std::bad_alloc kann geworfen werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung, die einen error_code&-Parameter akzeptiert, setzt diesen auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hat
noexcept-Spezifikation:
noexcept
[bearbeiten] Hinweise
Die Attribut-erhaltende Überladung (2) wird implizit von copy() aufgerufen, wenn Verzeichnisse rekursiv kopiert werden. Ihr Äquivalent in boost.filesystem ist copy_directory (mit vertauschter Argumentreihenfolge).
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <cstdlib> #include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::create_directories("sandbox/1/2/a"); fs::create_directory("sandbox/1/2/b"); fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all); fs::create_directory("sandbox/1/2/c", "sandbox/1/2/b"); std::system("ls -l sandbox/1/2"); fs::remove_all("sandbox"); }
Mögliche Ausgabe
drwxr-xr-x 2 user group 4096 Apr 15 09:33 a drwxr-x--- 2 user group 4096 Apr 15 09:33 b drwxr-x--- 2 user group 4096 Apr 15 09:33 c
[bearbeiten] Siehe auch
| erstellt einen symbolischen Link (Funktion) | |
| kopiert Dateien oder Verzeichnisse (Funktion) | |
| identifiziert Dateisystemberechtigungen (Aufzählung) |