Bestimmen des aktuellen Verzeichnisses
In C kann das Ermitteln des aktuellen Verzeichnisses, in dem eine ausführbare Datei ausgeführt wird, für Aufgaben wie das Erstellen von Dateien oder das Verwalten von Ressourcen von entscheidender Bedeutung sein . Die Verwendung von GetCurrentDirectory() kann jedoch zu Ausnahmen führen, wie im bereitgestellten Beispiel gezeigt.
Behandeln der Ausnahme
Das Problem entsteht, weil GetCurrentDirectory() einen gültigen Puffer erwartet Speichern Sie den aktuellen Verzeichnispfad. Im bereitgestellten Code ist NPath zunächst auf NULL gesetzt. Das Zuweisen eines NULL-Zeigers zur Funktion GetCurrentDirectory() führt zu einer Ausnahme.
Alternative Ansätze
Anstelle der Verwendung von GetCurrentDirectory() können mehrere andere Methoden verwendet werden, um die zu erhalten aktuelles Verzeichnis:
1. GetModuleFileName:
Um den ausführbaren Pfad abzurufen, der sowohl das Verzeichnis als auch den Dateinamen enthält, verwenden Sie GetModuleFileName():
TCHAR buffer[MAX_PATH] = { 0 }; GetModuleFileName(NULL, buffer, MAX_PATH);
2. Extrahieren des Verzeichnispfads aus dem Pfad der ausführbaren Datei:
Sobald der Pfad der ausführbaren Datei ermittelt wurde, können Sie den Verzeichnispfad extrahieren, indem Sie das letzte Vorkommen von „“ oder „/“ im Pfad suchen:
std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\/"); std::wstring directoryPath = std::wstring(buffer).substr(0, pos);
Dies liefert den Verzeichnispfad ohne den Dateinamen.
Beispiel Funktion:
Hier ist eine Beispielfunktion, die den Verzeichnispfad der ausführbaren Datei zurückgibt:
#include <windows.h> #include <string> std::wstring ExePath() { TCHAR buffer[MAX_PATH] = { 0 }; GetModuleFileName(NULL, buffer, MAX_PATH); std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\/"); return std::wstring(buffer).substr(0, pos); }
Verwendung:
std::cout << "Current directory: " << ExePath() << std::endl;
Durch die Verwendung dieser alternativen Ansätze Sie können das aktuelle Verzeichnis effektiv abrufen und Ausnahmen im Zusammenhang mit GetCurrentDirectory() vermeiden.
Das obige ist der detaillierte Inhalt vonWie vermeide ich Ausnahmen beim Abrufen des aktuellen Verzeichnisses in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!