Verzeichnis in C++ erstellen

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion std::filesystem::create_directory, um ein Verzeichnis in C++ zu erstellen
  2. Verwenden Sie die Funktion std::filesystem::create_directories, um ein Verzeichnis in C++ zu erstellen
Verzeichnis in C++ 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;
}
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

Verwandter Artikel - C++ Filesystem