Créer un répertoire en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction std::filesystem::create_directory pour créer un répertoire en C++
  2. Utilisez la fonction std::filesystem::create_directories pour créer un répertoire en C++
Créer un répertoire en C++

Cet article explique plusieurs méthodes de création d’un répertoire en C++.

Utilisez la fonction std::filesystem::create_directory pour créer un répertoire en C++

Depuis la version C++ 17, la bibliothèque standard fournit l’interface de manipulation du système de fichiers implémentée à l’origine dans le cadre de la bibliothèque Boost. Notez que toutes les fonctionnalités du système de fichiers sont fournies sous l’espace de noms std::filesystem, que nous appelons fs dans les exemples suivants. La fonction create_directory permet de créer un nouveau répertoire dans le répertoire de travail courant. La fonction prend un argument obligatoire de type std::filesystem::path, qui peut également être passé en tant qu’objet string, et l’initialisation correcte se fait automatiquement.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_name("tmp_dir");

  fs::create_directory(directory_name)
      ? cout << "created directory - " << directory_name << endl
      : cout << "create_directory() failed" << endl;

  return EXIT_SUCCESS;
}

L’appel de fonction réussi peut être vérifié par la valeur de retour du create_directory, qui doit être évalué comme true. Notez que le répertoire créé peut être supprimé avec l’appel std::filesystem::remove, qui prend le même chemin de répertoire. create_directory peut éventuellement prendre des arguments à deux chemins, dont le second doit être un répertoire existant et un répertoire nouvellement créé copiera les attributs de l’ancien.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_name("tmp_dir");

  fs::create_directory(directory_name)
      ? cout << "created directory - " << directory_name << endl
      : cout << "create_directory() failed" << endl;

  fs::remove(directory_name);

  return EXIT_SUCCESS;
}

Utilisez la fonction std::filesystem::create_directories pour créer un répertoire en C++

Une autre fonction utile est std::filesystem::create_directories, qui peut créer plusieurs répertoires imbriqués, tous spécifiés avec un seul argument de chemin. Dans l’exemple de code suivant, nous démontrons cette fonction pour créer des répertoires imbriqués à 4 niveaux, puis un autre qui partage le répertoire racine avec le premier. Notez cependant que si les noms de répertoire de dernier niveau existent déjà, la fonction renvoie false.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_tree = "x_tmp/level1/level2/level3";
  string directory_tree2 = "x_tmp/level1-2/level2-1";

  auto ret = fs::create_directories(directory_tree);
  if (ret) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  auto ret2 = fs::create_directories(directory_tree2);
  if (ret2) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  return EXIT_SUCCESS;
}

Similaire au create_directory, cette fonction renvoie également une valeur booléenne pour indiquer un appel réussi. Si la suppression est nécessaire, la fonction std::filesystem::remove_all peut être appelée avec le nom du répertoire racine, elle supprimera tout l’arborescence.

#include <filesystem>
#include <iostream>

using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;

int main() {
  string directory_tree = "x_tmp/level1/level2/level3";
  string directory_tree2 = "x_tmp/level1-2/level2-1";

  auto ret = fs::create_directories(directory_tree);
  if (ret) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  auto ret2 = fs::create_directories(directory_tree2);
  if (ret2) {
    cout << "created directory tree as follows: " << endl;
    std::system("tree x_tmp");
  } else {
    cout << "create_directories() failed" << endl;
  }

  fs::remove_all(directory_tree.substr(0, directory_tree.find('/')));

  return EXIT_SUCCESS;
}
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Filesystem