aktuellen pfad auslesen
-
Hmmh schrieb:
@dot: per SetCurrentDirectory kann dieses aber auch geändert werden...
Darum heißt's ja auch "aktueller Pfad" und nicht "ewiger Pfad"... :p
-
Ich wollte nur darauf hinweisen, dass
GetCurrentDirectory
keine zuverlässige Methode ist, den Pfad der ausführbaren Datei zu erhalten.Klar, bei dem anzunehmenden Minimalprgrämmchen des TE (soll keine Beleidigung sein!) spielt es vielleicht keine Rolle... :xmas1:
-
Hmmh schrieb:
Ich wollte nur darauf hinweisen, dass
GetCurrentDirectory
keine zuverlässige Methode ist, den Pfad der ausführbaren Datei zu erhalten.Ok, ich ging davon aus dass er eigentlich das Working Directory meint und nicht den Pfad der exe. Für den Pfad zur exe is natürlich GetModuleFileName() the way to go, da hast du recht.
-
Hmmh schrieb:
Klar, bei dem anzunehmenden Minimalprgrämmchen des TE (soll keine Beleidigung sein!) spielt es vielleicht keine Rolle... :xmas1:
Wieso spielt es keine Rolle? Und was hat das mit dem Umfang des Programms zu tun?
-
_Luckie schrieb:
Hmmh schrieb:
Klar, bei dem anzunehmenden Minimalprgrämmchen des TE (soll keine Beleidigung sein!) spielt es vielleicht keine Rolle... :xmas1:
Wieso spielt es keine Rolle? Und was hat das mit dem Umfang des Programms zu tun?
Ich hatte angenommen, dass das Arbeitsverzeichnis standardmäßig auf den Pfad der ausführbaren Datei gelegt wird, zwischenzeitlich aber durch GetOpenFileName etc. geändert werden kann.
Wie geschrieben, der Pfad der ausführbaren Datei sollte damit nicht bestimmt werden.
-
So ist es.
Arbeitsverzeichnis -> GetCurrentDirectory()
Pfad zur exe -> GetModuleFileName()
-
Hmmh schrieb:
_Luckie schrieb:
Hmmh schrieb:
Klar, bei dem anzunehmenden Minimalprgrämmchen des TE (soll keine Beleidigung sein!) spielt es vielleicht keine Rolle... :xmas1:
Wieso spielt es keine Rolle? Und was hat das mit dem Umfang des Programms zu tun?
Ich hatte angenommen, dass das Arbeitsverzeichnis standardmäßig auf den Pfad der ausführbaren Datei gelegt wird, zwischenzeitlich aber durch GetOpenFileName etc. geändert werden kann.
Wie geschrieben, der Pfad der ausführbaren Datei sollte damit nicht bestimmt werden.
Es reicht schon bei einer Verknüpfung ein anderes Arbeitsverzeichnis anzugeben.
-
Hmmh schrieb:
Ich würds einfach per GetModuleFilenameEx machen:
TCHAR buffer[MAX_PATH]; if(size_t len = GetModuleFileNameEx(GetCurrentProcess(), 0, buffer, sizeof(buffer)/sizeof(TCHAR))) { do { if(buffer[--len]=='\\') { buffer[len] = 0; break; } } while(len); }
Also Aufruf, Suchen des letzten '\' und Nullsetzen.
buffer
enthält nun den Pfad.ist das nur der pfad oder auch der pfad + name der exe?
-
Das steht in der Doku.
-
hans, mal ernsthaft, willst du uns hier eigentlich alle verarschen? Lies mal die Posts durch! Da wirst du die Antwort finden!
Wir machen keine Hausaufgaben
-
das verwirrt mich:
Also Aufruf, Suchen des letzten '\' und Nullsetzen. buffer enthält nun den Pfad.
-
was ist ein pfad?
-
Frag doch nen Pfadfinder!
-
dot schrieb:
Hmmh schrieb:
@dot: per SetCurrentDirectory kann dieses aber auch geändert werden...
Darum heißt's ja auch "aktueller Pfad" und nicht "ewiger Pfad"... :p
-
Ansonsten sollte bei einem C-Programm mit einer main ein Einstiegspunkt auch argv[0] den voll qualifizierten Namen des Programms geben.
Das Arbeitsverzeichnis holst Du Dir, wie beschrieben oder auch nicht.
Falls den nicht weiß, was voll qualifizierte Name heißt goggle full qualified filename.
Alternative schau Dir bei Deinem Porgramm argv[0] an.
Obwohl nach Deinen Auslassungen zu den Antwortspost, denke ich das Du ein Troll bist, dem die Zimtplätzchen auf den Magen schlugen.
-
zuckerlie schrieb:
Du könntest es prinzipiell auch über system(); machen...
böse, böse, böse
-
Shiba schrieb:
Ansonsten sollte bei einem C-Programm mit einer main ein Einstiegspunkt auch argv[0] den voll qualifizierten Namen des Programms geben.
Das ist falsch.
ANSI C spezifiziert nirgendwo den Inhalt von argv[0]. Dort kann sämtlicher Müll drinstehen.
http://c-faq.com/osdep/exepath.html
-
Shiba schrieb:
zuckerlie schrieb:
Du könntest es prinzipiell auch über system(); machen...
böse, böse, böseNeeein, system() ist gaaanz toll und speziell! wwwwuuuuuuhhhhhhhhh!
-
Wutz schrieb:
Shiba schrieb:
Ansonsten sollte bei einem C-Programm mit einer main ein Einstiegspunkt auch argv[0] den voll qualifizierten Namen des Programms geben.
Das ist falsch.
ANSI C spezifiziert nirgendwo den Inhalt von argv[0]. Dort kann sämtlicher Müll drinstehen.
http://c-faq.com/osdep/exepath.htmlStimmt, da habe ich mal meine Erfahrung als Standard genommen.
Selbst MS sagt, das argv[0] nicht unter allen Umständen den ausführbaren Programmnamen enthalten muss. Sie empfehlen GetModuleFilename (wie im Thread auch)
Na ja wenigsten was gelernt