Namespaces
Variants

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

From cppreference.net
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,

std:: error_code & ec ) noexcept ;
(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)
1,2) Crée le répertoire p comme le ferait la fonction POSIX 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.
3,4) Identique à (1,2) , sauf que les attributs du nouveau répertoire sont copiés depuis existing_p (qui doit être un répertoire existant). Les attributs copiés dépendent du système d'exploitation : sur les systèmes POSIX, les attributs sont copiés comme par
stat(existing_p.c_str(), &attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
Sur Windows, aucun attribut de existing_p n'est copié.
5,6) Exécute (1,2) pour chaque élément de p qui n'existe pas déjà. Si p existe déjà, la fonction ne fait rien (cette condition n'est pas traitée comme une erreur).

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.

1,5) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec p comme premier argument de chemin et le code d'erreur du système comme argument de code d'erreur.
2,6) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.
3) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec p comme premier argument de chemin, existing_p comme deuxième argument de chemin, et le code d'erreur du système comme argument de code d'erreur.
4) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

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

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)