std::filesystem:: create_directory, std::filesystem:: create_directories
|
Definiert im Header
<filesystem>
|
||
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (seit C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
noexcept
;
|
(2) | (seit C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const std:: filesystem :: path & existing_p ) ; |
(3) | (seit C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const
std::
filesystem
::
path
&
existing_p,
|
(4) | (seit C++17) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p
)
;
|
(5) | (seit C++17) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
;
|
(6) | (seit C++17) |
mkdir()
mit einem zweiten Argument von
static_cast
<
int
>
(
std::
filesystem
::
perms
::
all
)
(das übergeordnete Verzeichnis muss bereits existieren). Falls die Funktion fehlschlägt, weil
p
auf ein existierendes Verzeichnis verweist, wird kein Fehler gemeldet. Andernfalls wird bei einem Fehler eine Fehlermeldung ausgegeben.
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
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
true wenn ein Verzeichnis neu erstellt wurde für das Verzeichnis, auf das p verweist, false andernfalls.
Ausnahmen
Jede Überladung, die nicht als
noexcept
gekennzeichnet ist, kann
std::bad_alloc
auslösen, wenn die Speicherallokation fehlschlägt.
Hinweise
Die attributerhaltende Überladung
(3,4)
wird implizit von
copy()
aufgerufen, wenn Verzeichnisse rekursiv kopiert werden. Ihr Äquivalent in boost.filesystem ist
copy_directory
(mit umgekehrter Argumentreihenfolge).
Beispiel
#include <cassert> #include <cstdlib> #include <filesystem> int main() { std::filesystem::current_path(std::filesystem::temp_directory_path()); // Grundlegende Verwendung std::filesystem::create_directories("sandbox/1/2/a"); std::filesystem::create_directory("sandbox/1/2/b"); // Verzeichnis existiert bereits (false zurückgegeben, kein Fehler) assert(!std::filesystem::create_directory("sandbox/1/2/b")); // Verwendung der Berechtigungskopie std::filesystem::permissions( "sandbox/1/2/b", std::filesystem::perms::others_all, std::filesystem::perm_options::remove ); std::filesystem::create_directory("sandbox/1/2/c", "sandbox/1/2/b"); std::system("ls -l sandbox/1/2"); std::system("tree sandbox"); std::filesystem::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
sandbox
└── 1
└── 2
├── a
├── b
└── c
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 2935 | C++17 | Fehler, falls Ziel bereits existiert, aber kein Verzeichnis ist | kein Fehler |
| LWG 3014 | C++17 |
error_code
Überladung von
create_directories
als noexcept markiert, kann aber Speicher allozieren
|
noexcept entfernt |
| P1164R1 | C++17 | Erstellungsfehler verursacht durch existierende Nicht-Verzeichnis-Datei ist kein Fehler | als Fehler festgelegt |
Siehe auch
|
(C++17)
(C++17)
|
erstellt eine symbolische Verknüpfung
(Funktion) |
|
(C++17)
|
kopiert Dateien oder Verzeichnisse
(Funktion) |
|
(C++17)
|
identifiziert Dateisystem-Berechtigungen
(Enumeration) |