Crea directory in C++
-
Usa la funzione
std::filesystem::create_directory
per creare una directory in C++ -
Usa la funzione
std::filesystem::create_directories
per creare una directory in C++
Questo articolo spiegherà diversi metodi su come creare una directory in C++.
Usa la funzione std::filesystem::create_directory
per creare una directory in C++
Dalla versione C++ 17, la libreria standard fornisce l’interfaccia di manipolazione del filesystem originariamente implementata come parte della libreria Boost. Notare che tutte le funzionalità del filesystem sono fornite sotto lo spazio dei nomi std::filesystem
, che chiameremo fs
negli esempi seguenti. La funzione create_directory
viene utilizzata per creare una nuova directory nella directory di lavoro corrente. La funzione accetta un argomento obbligatorio di tipo std::filesystem::path
, che può anche essere passato come oggetto stringa, e la corretta inizializzazione viene eseguita 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;
}
La chiamata di funzione riuscita può essere verificata dal valore di ritorno di create_directory
, che dovrebbe essere valutato come true
. Notare che la directory creata può essere rimossa con la chiamata std::filesystem::remove
, che accetta lo stesso percorso della directory. Opzionalmente create_directory
può accettare argomenti a due percorsi, il secondo dei quali deve essere una directory esistente e una directory appena creata copierà gli attributi della prima.
#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;
}
Usa la funzione std::filesystem::create_directories
per creare una directory in C++
Un’altra funzione utile è std::filesystem::create_directories
, che può creare più directory annidate, tutte specificate con un unico argomento di percorso. Nel seguente codice di esempio, dimostriamo questa funzione per creare directory nidificate a 4 livelli e poi un’altra che condivide la directory principale con la prima. Nota però, se i nomi di directory dell’ultimo livello esistono già, la funzione restituisce 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;
}
Simile a create_directory
, questa funzione restituisce anche un valore booleano per denotare una chiamata riuscita. Nel caso in cui sia richiesta la rimozione, la funzione std::filesystem::remove_all
può essere invocata con il nome della directory root, cancellerà l’intero albero.
#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