Criar diretório em C++

Jinku Hu 12 outubro 2023
  1. Use a função std::filesystem::create_directory para criar um diretório em C++
  2. Use a função std::filesystem::create_directories para criar um diretório em C++
Criar diretório em C++

Este artigo explicará vários métodos de como criar um diretório em C++.

Use a função std::filesystem::create_directory para criar um diretório em C++

Desde a versão C++ 17, a biblioteca padrão fornece a interface de manipulação do sistema de arquivos originalmente implementada como parte da biblioteca Boost. Observe que todos os recursos do sistema de arquivos são fornecidos sob o namespace std::filesystem, que estamos apelidando de fs nos exemplos a seguir. A função create_directory é usada para criar um novo diretório no diretório de trabalho atual. A função recebe um argumento obrigatório do tipo std::filesystem::path, que também pode ser passado como um objeto string, e a inicialização apropriada é feita automaticamente.

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

A chamada de função bem-sucedida pode ser verificada pelo valor de retorno de create_directory, que deve ser avaliado como true. Observe que o diretório criado pode ser removido com a chamada std::filesystem::remove, que leva o mesmo caminho de diretório. create_directory opcionalmente pode ter argumentos de dois caminhos, o segundo dos quais deve ser um diretório existente e um diretório recém-criado irá copiar os atributos do 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;
}

Use a função std::filesystem::create_directories para criar um diretório em C++

Outra função útil é std::filesystem::create_directories, que pode criar vários diretórios aninhados, todos especificados com um único argumento de caminho. No código de exemplo a seguir, demonstramos essa função para criar diretórios aninhados de 4 níveis e, em seguida, outro que compartilha o diretório raiz com o primeiro. Observe, porém, que se os nomes de diretório do último nível já existirem, a função retornará 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;
}

Semelhante ao create_directory, esta função também retorna um valor booleano para denotar uma chamada bem-sucedida. Caso a remoção seja necessária, a função std::filesystem::remove_all pode ser chamada com o nome do diretório raiz, ela irá deletar toda a árvore.

#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

Artigo relacionado - C++ Filesystem