zurückliefern vom Programmpfad
-
Gibt es eine Ansi C++ Standard Möglichkeit sich den Pfad anzeigen zu lassen, in dem sich die compilierte EXE Datei zum Zeitpunkt der Ausführung befindet?
Wenn ja, funktioniert es auch im folgenden Fall? Mein Programm wird ebenfalls gestartet, wenn ein bestimmter Dateityp im Explorer angeklickt wird (es lädt dann den Inhalt der entspr. Datei).
Entwicklungsumgebung ist Visual C++ 6.0 auf WIN 2000 bzw WIN XP. Ein kurzes Codebeispiel wäre super. Vielen Dank im Voraus!
-
Hm, mir fällt da nur argv[0] ein. Ob da der Pfad mitgeliefert wird weiß ich nicht. Wird ggf. auch implementierungsabhängig sein.
-
bin ganz der Ansicht meines Vorrednerers sihe folgendes:
#define MAXSIGNS 1024 char* getProgramPath(int argc, char *argv[]) { char path [MAXSIGN]; char *lastBackSlash = NULL; if(argc > 0) { /* Ende des String ermitteln */ int index = 0; while((argv[0][index]) != '\0') { ++index; } /* letztes Backslash bestimmen vom Ende aus */ while(argv[0][index+1] != '\\') { lastBackSlash = &argv[0][index]; --index; } /* String bis zum letzten Backslash umkopieren */ index = 0; while(&argv[0][index] != &lastBackSlash[0]) { path[index] = argv[0][index]; path[index + 1] = '\0'; index++; } return path; } else return NULL; } char* getProgramName(int argc, char *argv[]) { char *fromBackSlash = NULL; if(argc > 0) { /* Ende des String ermitteln */ int index = 0; while((argv[0][index]) != '\0') { ++index; } /* letztes Backslash bestimmen */ while(argv[0][index+1] != '\\') { fromBackSlash = &argv[0][index]; --index; } return fromBackSlash + 1; } else return NULL; }
wie wirds verwendet:
#include <iostream> int main(int argc, char *argv[]) { cout << getProgramPath(argc, argv) << endl; cin.get(); return 0; }
mfg
-
Laut Standard muss AFAIK in argv[0] nur stehen, wie das Programm aufgerufen wurde. Unportabel ist es also so oder so. Da kann man dann auch gleich die WinAPI benutzen (natürlich trotzdem mit std::string und std::vector). Mit GetModuleFileName, GetModuleHandle und string::rfind kann man da relativ leicht was basteln.
Und Zeiger auf lokale Arrays zurückgeben ist nicht gerade die feine englische Art
-
Danke erst mal für die schnellen Antworten. Aber ich habe mich wohl etwas missverständlich ausgedrückt. Es ging mir NICHT um den Pfad der per Doppelklick mit dem Programm assoziierten Dateien, sondern um den EXE File des Programms selbst. Wie bekomme ich also von dem Programmcode, der gerade läuft heraus, in welchem Verzeichnis sich der EXE File befindet?
-
Der Code bezieht sich auch auf den EXE-Pfad. Die übergebenen Datei wäre argv[1]. argv[0] bzw. GetModuleFileName(GetModuleHandle(0), ...) ist die aufgerufene EXE.