Namensräume
Varianten
Aktionen

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 durch
stat(existing_p.c_str(), &attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
Auf Windows-Betriebssystemen werden die Attribute kopiert, als ob 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, 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

#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) [bearbeiten]
kopiert Dateien oder Verzeichnisse
(Funktion) [bearbeiten]
identifiziert Dateisystemberechtigungen
(Aufzählung) [bearbeiten]