Aktuelles Verzeichnis in C++ abrufen
-
Verwenden Sie die Funktion
getcwd
, um das aktuelle Verzeichnis zu erhalten -
Mit der Funktion
std::filesystem::current_path
das aktuelle Verzeichnis ermitteln -
Verwenden Sie die Funktion
get_current_dir_name
, um das aktuelle Verzeichnis zu ermitteln
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"
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