Crear directorio en C++

Jinku Hu 12 octubre 2023
  1. Utilice la función std::filesystem::create_directory para crear un directorio en C++
  2. Utilice la función std::filesystem::create_directories para crear un directorio en C++
Crear directorio en C++

Este artículo explicará varios métodos de cómo crear un directorio en C++.

Utilice la función std::filesystem::create_directory para crear un directorio en C++

Desde la versión C++ 17, la biblioteca estándar proporciona la interfaz de manipulación del sistema de archivos implementada originalmente como parte de la biblioteca Boost. Tenga en cuenta que todas las funciones del sistema de archivos se proporcionan en el espacio de nombres std::filesystem, al que denominamos fs en los siguientes ejemplos. La función create_directory se utiliza para crear un nuevo directorio en el directorio de trabajo actual. La función toma un argumento obligatorio de tipo std::filesystem::path, que también se puede pasar como un objeto de cadena, y la inicialización adecuada se realiza automáticamente.

#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;
}

La llamada a la función exitosa puede ser verificada por el valor de retorno del create_directory, que debe evaluarse como true. Tenga en cuenta que el directorio creado se puede eliminar con la llamada std::filesystem::remove, que toma la misma ruta de directorio. create_directory opcionalmente puede tomar argumentos de dos rutas, el segundo de los cuales debe ser un directorio existente y un directorio recién creado copiará los atributos del anterior.

#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;
}

Utilice la función std::filesystem::create_directories para crear un directorio en C++

Otra función útil es std::filesystem::create_directories, que puede crear múltiples directorios anidados, todos especificados con un único argumento de ruta. En el siguiente código de ejemplo, demostramos esta función para crear directorios anidados de 4 niveles y luego otro que comparte el directorio raíz con el primero. Sin embargo, tenga en cuenta que si los nombres de directorio de los últimos niveles ya existen, la función devuelve 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;
}

Similar a create_directory, esta función también devuelve un valor booleano para denotar una llamada exitosa. En caso de que se requiera la eliminación, la función std::filesystem::remove_all puede invocarse con el nombre del directorio raíz, eliminará todo el árbol.

#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;
}
Autor: 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

Artículo relacionado - C++ Filesystem