Namespaces
Variants

std::experimental::filesystem:: create_directory, std::experimental::filesystem:: create_directories

From cppreference.net
Definiert im Header <experimental/filesystem>
bool create_directory ( const path & p ) ;
bool create_directory ( const path & p, error_code & ec ) ;
(1) (Filesystem 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) (Filesystem TS)
bool create_directories ( const path & p ) ;
bool create_directories ( const path & p, error_code & ec ) ;
(3) (Filesystem TS)
1) Erstellt das Verzeichnis p wie durch POSIX mkdir() mit einem zweiten Argument von static_cast < int > ( fs :: perms :: all ) (das übergeordnete Verzeichnis muss bereits existieren). Falls p bereits existiert und bereits ein Verzeichnis ist, führt die Funktion keine Aktion aus (dieser Zustand wird nicht als Fehler behandelt).
2) Gleich wie (1) , mit der Ausnahme, dass die Attribute des neuen Verzeichnisses von existing_p kopiert werden (welches ein existierendes Verzeichnis sein muss). Es ist betriebssystemabhängig, welche Attribute kopiert werden: Auf POSIX-Systemen werden die Attribute kopiert wie durch
stat(existing_p.c_str(), &attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
Auf Windows-Betriebssystemen werden die Attribute kopiert wie durch
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, falls ein Fehler auftritt.

Inhaltsverzeichnis

Parameter

p - der Pfad zum neuen zu erstellenden Verzeichnis
existing_p - der Pfad zu einem Verzeichnis, von dem die Attribute kopiert werden sollen
ec - Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

1,2) true falls die Verzeichniserstellung erfolgreich ist, false andernfalls.

Ausnahmen

1,3) Die Überladung, die keinen error_code & Parameter akzeptiert, wirft 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 Speicherallokation 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 bei zugrundeliegenden OS-API-Fehlern filesystem_error , konstruiert mit p als erstes Argument, existing_p als zweites Argument und dem OS-Fehlercode als Fehlercode-Argument. std:: bad_alloc kann geworfen werden, wenn die Speicherallokation 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

Hinweise

Die attributerhaltende Überladung (2) wird implizit von copy() aufgerufen, wenn Verzeichnisse rekursiv kopiert werden. Ihr Äquivalent in boost.filesystem ist copy_directory (mit umgekehrter Argumentreihenfolge).

Beispiel

#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

Siehe auch

erstellt eine symbolische Verknüpfung
(Funktion)
kopiert Dateien oder Verzeichnisse
(Funktion)
identifiziert Dateisystemberechtigungen
(Enumeration)