Heim > Backend-Entwicklung > C++ > Hauptteil

Wie vermeide ich Ausnahmen beim Abrufen des aktuellen Verzeichnisses in C?

Barbara Streisand
Freigeben: 2024-11-10 21:55:02
Original
795 Leute haben es durchsucht

How to Avoid Exceptions When Getting the Current Directory in C  ?

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

Verwendung:

std::cout << "Current directory: " << ExePath() << std::endl;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage