Gibt es eine plattform- und dateisystemunabhängige Methode, um den vollständigen Pfad des Verzeichnisses zu ermitteln, in dem ein Programm mit C/C++ ausgeführt wird? Nicht zu verwechseln mit dem aktuellen Arbeitsverzeichnis. (Bitte schlagen Sie keine Bibliotheken vor, es sei denn, es sind Standardbibliotheken wie clib oder STL).
(Wenn es keine plattform- bzw. dateisystemunabhängige Methode gibt, sind Vorschläge, die unter Windows und Linux für bestimmte Dateisysteme funktionieren, ebenfalls willkommen).
4 Stimmen
Es sei denn, Sie können den Pfad zuverlässig aus
argv[0]
ist die Technik sehr betriebssystemabhängig.2 Stimmen
Nur zur Klarstellung: Das "aktuelle Verzeichnis" oder "das Verzeichnis, in dem das Programm läuft" (in der Terminologie der Frage) ist das Verzeichnis, in dem sich die Image-Datei des Programms (~.exe-Datei) befindet, und das "aktuelle arbeiten directory' das Verzeichnis ist, das automatisch vervollständigt wird, wenn das Programm relative Pfade verwendet?
4 Stimmen
Wenn Sie
#include <windows.h>
setzt Windows automatisch einechar*
zum ausführbaren Pfad in_pgmptr
. Wenn Sie nur unter Windows arbeiten, brauchen Sie keine zusätzlichen Funktionen aufzurufen und keinen Müll anzunehmen.0 Stimmen
Ist damit Ihre ursprüngliche Frage beantwortet? github.com/gpakosz/whereami
3 Stimmen
Obwohl der Kommentar schon drei Jahre alt ist, möchte ich auf den Kommentar von rsethc zu folgenden Punkten eingehen
_pgmptr
. In der MSDN-Dokumentation heißt es, dass die_pgmptr
y_wpgmptr
Variablen sind veraltet, und Sie sollten die Funktion_get_pgmptr(char**)
o_get_wpgmptr(wchar_t**)
stattdessen. MSDN0 Stimmen
Ich habe die Windows-Version mit Borland C++Builder 6 ausprobiert, die Parameter pBuf und len sind nicht bekannt. Undefiniertes Symbol. Welche Header sollte ich einfügen?
0 Stimmen
Wenn Sie einen modernen Compiler verwenden, sollten Sie die stackoverflow.com/a/60804126/3246135 .