Criar diretório em C++
-
Use a função
std::filesystem::create_directory
para criar um diretório em C++ -
Use a função
std::filesystem::create_directories
para criar um 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;
}
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