Heim  >  Artikel  >  Backend-Entwicklung  >  Wie vermeide ich Ausnahmen beim Abrufen des aktuellen Verzeichnisses in C?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-10 21:55:02764Durchsuche

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);

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!

Stellungnahme:
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