Pfad zum ordner des programms

FSA

Erfahrenes Mitglied
Hallo ich wollte mit C++ unter Windows den Ordner Pfad meine Programms ermitteln.
Mit
C++:
char exepfad[128];
GetModuleFileName(NULL, exepfad, 128);
bekomme ich den pfad zwar auch aber auch mit test.exe hinten und das will ich nett.
Ich habe schon daran gedacht einfach die zeichen (8) zu löschen aber wenn der user irgendwas umbennent naja...

Danke MFG
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

Du kannst den String nehmen den dir GetModuleFileName zurückgibt, aber diesen nur bis zum letzten Backslash nutzen. Das stimmt dann immer und ist vom Dateinamen unabhängig.
 
C++:
int lastBS = 0;
for (int i = 0; i < strlen(exepfad); i++)
{
  if (exepfad[i]=='\\')
    lastBS = i;
}

char* exedir = new char[lastBS];
strncpy(exedir, exepfad, lastBS);

Ich habs jetzt nicht getestet, aber grundsätzlich sollte es stimmen.
 
Zuletzt bearbeitet von einem Moderator:
Den string mit einer for-Schleife "rückwärts" durchlaufen und jedes einzelne Zeichen auf "/" oder "\" überprüfen. Sobald dir die überprüfung ein TRUE liefert, weißt du, dass du am ersten --- also letztem Slash-Zeichen --- bist. Den "restlichen"-string kannst du dann in einen anderen schreiben und hast somit "nur" den Programm-Pfad.
 
@Steiner_B die Funktion funktioniert soweit nur das am ende so zeichen kommen:
viele ^2 und noch einhalb zeichen und weiße Vierecke.
muss man da verstehen **** ?-)
 
Lässt einfach die letzten zeichen weg. Nur genau die Anzahl an Zeichen verwenden, so lange auch der Pfad ist. Die anderen Zeichen lässt du einfach weg. Kopiere die notwendigen Zeichen einfach in einen neuen string, dann sollte es passen.
 
Das liegt daran, das C-Strings immer mit \0 aufhören müssen.

C++:
int lastBS = 0;
for (int i = strlen(exepfad); i > 0 ; i--)
{
  if (exepfad[i]=='\\')
  {
    lastBS = i;
    return;
  }
}
 
char* exedir = new char[lastBS + 1];
strncpy(exedir, exepfad, lastBS);
exedir[lastBS] = '\0';
 
Zuletzt bearbeitet von einem Moderator:
Das geht doch auch einfacher:
C++:
char exepfad[MAX_PATH];
GetModuleFileName(NULL, exepfad, MAX_PATH);
char* lastBS = strrchr(exepfad, '\\');
if (lastBS != NULL) {
  *lastBS = '\0';
}
// Verzeichnis steht jetzt in exepfad

Grüße,
Matthias
 
Wenn du Startparameter hast, weshalb nicht einfach argv[0] abfragen?
C++:
int main(int argc, char* argv[])
{
//...
printf(argv[0]); //Ausgabe
char exepath[256];
strcpy(exepath,argv[0]);
//und jetzt aus Matthias' Beitrag
char* lastBS = strrchr(exepfad, '\\');
if (lastBS != NULL) {
  *lastBS = '\0';
}
}

Gruss
cwriter
 
Zurück