Pfad zur Exe
-
Hallo,
ich möchte den Pfad zur Ausgeführten *.exe Datei haben allerdings ohne
den namen der Exe selbst. Also nur den Ordner in dem sie steht.Ich habe schon eine Funktion gefunden die mir den Pfad inklusive des Daterinamens liefert.
TCHAR pfad_zur_exe[252]; GetModuleFileName(NULL,pfad_zur_exe,250);Dies liefert mir:
c:\testordner\test.exeIch brauche aber
c:\testordnerGibt es eine fertige Funktion, die dies macht, oder wie kann ich den Namen der Datei hinten abschneiden?
Ich habe hier im Forum auch schon diese Seite gefunden:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39131.htmlallerdings schaffe ich es nicht dies bei TCHAR umzusetzen.
(Ich brauche den Pfad als TCHAR)
-
-
Danke,
aber ich habe eine einfachere Lösung gefunden.
GetCurrentDirectory(250,pfad_zur_exe);
-
Falsch! Das Current working directory ist nicht unbedingt das Verzeichnis in dem die EXE liegt. Es kann separat festgelegt werden.
-
char *guggstdu; guggstdu = strrchr(pfad_zur_exe, '\\'); if(guggstdu){ *guggstdu = 0; }
-
*guggstdu schrieb:
char *guggstdu; guggstdu = strrchr(pfad_zur_exe, '\\'); if(guggstdu){ *guggstdu = 0; }Danke "guggstdu" und "Martin Richter" !
Ich habe es noch ein wenig abgeändert und jetzt funzt es:
TCHAR pfad_zur_exe[258]; GetModuleFileName(NULL,pfad_zur_exe,250); wchar_t* pointer=wcsrchr(pfad_zur_exe, '\\'); *pointer=0x0000;
-
*pointer=0x0000;
Wäre nicht
*pointer=(TCHAR) 0;sicherer?
-
ROFL
Sorry
Ob man 0 als 0 oder 0x0000 schreibt, und ob man es nachträglich noch auf TCHAR oder was auch immer castet ist in dem Fall ganz egal.
Bei der Zuweisung wird es doch sowieso in den passenden Typ verwandelt.
Du kannst auch genausogut "*pointer = false;" schreiben, was zwar komplett dämlich wäre aber im Endeffekt genau dasselbe macht.
-
hustbaer schrieb:
ROFL
Sorry
Ob man 0 als 0 oder 0x0000 schreibt, und ob man es nachträglich noch auf TCHAR oder was auch immer castet ist in dem Fall ganz egal.
Bei der Zuweisung wird es doch sowieso in den passenden Typ verwandelt.
Du kannst auch genausogut "*pointer = false;" schreiben, was zwar komplett dämlich wäre aber im Endeffekt genau dasselbe macht."Your applications should always cast zero to TCHAR when using null-terminated strings"
http://msdn.microsoft.com/en-us/library/ms776431(VS.85).aspx
-
OK. Trifft auf den Fall aber nicht zu. Sorry, ist so.
Du schreibst ja wohl hoffentlich auch nichtsize_t s = (size_t) 0; char c = (char) 0; long l = (long) 0;oder?
Die Sache sieht anders aus wenn der Typ des Literals wichtig ist, also z.B. hier:
CString str; str += TCHAR(0);Hier macht der Cast Sinn.
(EDIT: abgesehen davon dass man einen CString nicht selbst null-terminieren muss und sogesehen das alles keinen Sinn macht, aber denk dir einfach eine 32 statt der 0 wenn dich das stört /EDIT)Ich hoffe du erkennst den Unterschied.
-
str += TEXT('\0');
-
+= schrieb:
str += TEXT('\0');Genau so mache ich es auch.
Martin
-
Benutzt ihr nicht _T() statt TEXT()? Ich finde TEXT nimmt so viel sinnlosen Platz weg.