Verzeichnis in C++ erstellen
-
Verwenden Sie die Funktion
std::filesystem::create_directory
, um ein Verzeichnis in C++ zu erstellen -
Verwenden Sie die Funktion
std::filesystem::create_directories
, um ein Verzeichnis in C++ zu erstellen
In diesem Artikel werden verschiedene Methoden zum Erstellen eines Verzeichnisses in C++ erläutert.
Verwenden Sie die Funktion std::filesystem::create_directory
, um ein Verzeichnis in C++ zu erstellen
Seit der C++ 17-Version bietet die Standardbibliothek die ursprünglich als Teil der Boost-Bibliothek implementierte Schnittstelle zur Manipulation des Dateisystems. Beachten Sie, dass alle Dateisystemfunktionen unter dem Namespace std::filesystem
bereitgestellt werden, den wir in den folgenden Beispielen als fs
aliasen. Mit der Funktion create_directory
wird ein neues Verzeichnis im aktuellen Arbeitsverzeichnis erstellt. Die Funktion verwendet ein obligatorisches Argument vom Typ std::filesystem::path
, das auch als Zeichenkettenobjekt übergeben werden kann, und die ordnungsgemäße Initialisierung erfolgt automatisch.
#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;
}
Der erfolgreiche Funktionsaufruf kann durch den Rückgabewert des create_directory
überprüft werden, der als true
ausgewertet werden sollte. Beachten Sie, dass das erstellte Verzeichnis mit dem Aufruf std::filesystem::remove
entfernt werden kann, der denselben Verzeichnispfad verwendet. create_directory
kann optional Argumente mit zwei Pfaden verwenden, von denen das zweite ein vorhandenes Verzeichnis sein muss und ein neu erstelltes Verzeichnis die Attribute des vorherigen kopiert.
#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;
}
Verwenden Sie die Funktion std::filesystem::create_directories
, um ein Verzeichnis in C++ zu erstellen
Eine weitere nützliche Funktion ist std::filesystem::create_directories
, mit der mehrere verschachtelte Verzeichnisse erstellt werden können, die alle mit einem einzigen Pfadargument angegeben werden. Im folgenden Beispielcode demonstrieren wir diese Funktion, um verschachtelte Verzeichnisse auf 4 Ebenen und anschließend ein weiteres Verzeichnis zu erstellen, das das Stammverzeichnis mit dem ersten gemeinsam nutzt. Beachten Sie jedoch, dass die Funktion false
zurückgibt, wenn die Verzeichnisnamen der letzten Ebene bereits vorhanden sind.
#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;
}
Ähnlich wie im create_directory
gibt diese Funktion auch einen booleschen Wert zurück, um einen erfolgreichen Aufruf anzuzeigen. Falls das Entfernen erforderlich ist, kann die Funktion std::filesystem::remove_all
mit dem Namen des Stammverzeichnisses aufgerufen werden, wodurch der gesamte Baum gelöscht wird.
#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