Aktuelles Verzeichnis in C++ abrufen

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion getcwd, um das aktuelle Verzeichnis zu erhalten
  2. Mit der Funktion std::filesystem::current_path das aktuelle Verzeichnis ermitteln
  3. Verwenden Sie die Funktion get_current_dir_name, um das aktuelle Verzeichnis zu ermitteln
Aktuelles Verzeichnis in C++ abrufen

In diesem Artikel werden verschiedene Methoden erläutert, wie man das aktuelle Verzeichnis in C++ abrufen kann.

Verwenden Sie die Funktion getcwd, um das aktuelle Verzeichnis zu erhalten

Die Funktion getcwd ist eine POSIX-konforme Funktion, die auf vielen Unix-basierten Systemen verfügbar ist und mit der das aktuelle Arbeitsverzeichnis abgerufen werden kann. Die Funktion benötigt zwei Parameter - den ersten char*-Puffer, in dem der Verzeichnispfadname gespeichert ist, und die Größe des Puffers. Beachten Sie, dass wir char als Array mit fester Länge deklarieren und einen Puffer mit 256 Elementen zuweisen. Wenn der Aufruf erfolgreich ist, kann der gespeicherte Name des aktuellen Verzeichnisses durch Zugriff auf den char-Puffer ausgegeben werden.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;

int main() {
  char tmp[256];
  getcwd(tmp, 256);
  cout << "Current working directory: " << tmp << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Current working directory: /tmp/projects

Mit der Funktion std::filesystem::current_path das aktuelle Verzeichnis ermitteln

Die Methode std::filesystem::current_path ist Teil der C++-Dateisystembibliothek und ist die von den modernen Codierungsrichtlinien empfohlene Methode zum Abrufen des aktuellen Verzeichnisses. Beachten Sie, dass die filesystem-Bibliothek nach der C++17-Version hinzugefügt wurde und die entsprechende Version des Compilers erforderlich ist, um mit dem folgenden Code zu arbeiten.

std::filesystem::current_path ohne Argumente gibt das aktuelle Arbeitsverzeichnis zurück und kann direkt auf der Konsole ausgegeben werden. Wenn der Funktion ein Verzeichnispfad übergeben wird, ändert sie das aktuelle Verzeichnis in den angegebenen Pfad.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;

int main() {
  cout << "Current working directory: " << current_path() << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Current working directory: /tmp/projects

Verwenden Sie die Funktion get_current_dir_name, um das aktuelle Verzeichnis zu ermitteln

Die Funktion get_current_dir_name ist eine Funktion der C-Bibliothek, die der vorherigen Methode ähnlich ist, außer dass sie char* zurückgibt, in dem der Pfad des aktuellen Arbeitsverzeichnisses nach einem erfolgreichen Aufruf gespeichert ist. get_current_dir_name allokiert automatisch genügend dynamischen Speicher für den zu speichernden Pfadnamen, aber der Aufrufer ist dafür verantwortlich, den Speicher vor dem Programmende wieder freizugeben.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;

int main() {
  char *cwd = get_current_dir_name();
  cout << "Current working directory: " << cwd << endl;
  free(cwd);

  return EXIT_SUCCESS;
}

Ausgabe:

Current working directory: /tmp/projects

Eine weitere nützliche Funktion aus der C++-Dateisystembibliothek ist das Objekt std::filesystem::directory_iterator, mit dem die Elemente in einem gegebenen Verzeichnispfad durchlaufen werden können. Beachten Sie, dass Elemente Dateien, Symlinks, Verzeichnisse oder Sockets sein können und die Iterationsreihenfolge nicht spezifiziert ist. Im folgenden Beispiel geben wir den Pfadnamen jedes Elements im aktuellen Arbeitsverzeichnis aus.

#include <unistd.h>

#include <filesystem>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::filesystem::current_path;
using std::filesystem::directory_iterator;

int main() {
  for (auto& p : directory_iterator("./")) cout << p.path() << '\n';

  return EXIT_SUCCESS;
}

Ausgabe:

"./main.cpp"
"./a.out"
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