std::filesystem:: create_directory, std::filesystem:: create_directories
|
Défini dans l'en-tête
<filesystem>
|
||
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p
)
;
|
(1) | (depuis C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
noexcept
;
|
(2) | (depuis C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const std:: filesystem :: path & existing_p ) ; |
(3) | (depuis C++17) |
|
bool
create_directory
(
const
std::
filesystem
::
path
&
p,
const
std::
filesystem
::
path
&
existing_p,
|
(4) | (depuis C++17) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p
)
;
|
(5) | (depuis C++17) |
|
bool
create_directories
(
const
std::
filesystem
::
path
&
p,
std::
error_code
&
ec
)
;
|
(6) | (depuis C++17) |
mkdir()
avec un second argument de
static_cast
<
int
>
(
std::
filesystem
::
perms
::
all
)
(le répertoire parent doit déjà exister). Si la fonction échoue parce que
p
correspond à un répertoire existant, aucune erreur n'est signalée. Sinon, en cas d'échec, une erreur est signalée.
stat(existing_p.c_str(), &attributes_stat) mkdir(p.c_str(), attributes_stat.st_mode)
Table des matières |
Paramètres
| p | - | le chemin vers le nouveau répertoire à créer |
| existing_p | - | le chemin vers un répertoire à partir duquel copier les attributs |
| ec | - | paramètre de sortie pour le rapport d'erreurs dans la surcharge non-lançante |
Valeur de retour
true si un répertoire a été nouvellement créé pour le répertoire p résolu, false sinon.
Exceptions
Toute surcharge non marquée
noexcept
peut lever
std::bad_alloc
si l'allocation de mémoire échoue.
Notes
La surcharge préservant les attributs
(3,4)
est implicitement invoquée par
copy()
lors de la copie récursive de répertoires. Son équivalent dans boost.filesystem est
copy_directory
(avec l'ordre des arguments inversé).
Exemple
#include <cassert> #include <cstdlib> #include <filesystem> int main() { std::filesystem::current_path(std::filesystem::temp_directory_path()); // Utilisation de base std::filesystem::create_directories("sandbox/1/2/a"); std::filesystem::create_directory("sandbox/1/2/b"); // Le répertoire existe déjà (false retourné, pas d'erreur) assert(!std::filesystem::create_directory("sandbox/1/2/b")); // Utilisation de la copie des permissions 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"); }
Sortie possible :
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
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2935 | C++17 | erreur si la cible existe déjà mais n'est pas un répertoire | pas d'erreur |
| LWG 3014 | C++17 |
error_code
surcharge de
create_directories
marquée noexcept mais peut allouer de la mémoire
|
noexcept supprimé |
| P1164R1 | C++17 | l'échec de création causé par un fichier non-répertoire existant n'est pas une erreur | rendu erreur |
Voir aussi
|
(C++17)
(C++17)
|
crée un lien symbolique
(fonction) |
|
(C++17)
|
copie des fichiers ou répertoires
(fonction) |
|
(C++17)
|
identifie les permissions du système de fichiers
(énumération) |