Fehler bei Pfad der exe



  • Hi @ ALl.

    Ich möchte der Klasse im Konstrukter den Pfad/Dateinamen der Exe-Datei vermitteln.
    das sind LPCSTR-variablen.
    Im header:

    public: LPCSTR lpPath,lpFile;
    

    Im Konstruktor:

    {
    	// Get module path
    	char szBuffer[MAX_PATH+2];
    	char szPath[MAX_PATH+2];
    	char *pFilename;
    
    	GetModuleFileName (NULL, szBuffer, MAX_PATH);
    	GetFullPathName (szBuffer, sizeof (szBuffer), szPath, &pFilename);
    	szPath[pFilename-szPath] = '\0';
    
    	lpPath = szPath;
    	lpFile = pFileName;
    
    	MessageBox(NULL,lpPath,"Path",MB_OK);
    	MessageBox(NULL,lpFile,"File",MB_OK);
    }
    

    thx!



  • Eine etwas genauere Fehlerbeschreibung wäre evtl. hilfreich.



  • jo, die lpFile-variable bekommt kein dateinamen ab.
    warum?
    ich hab ihr doch den pFilename gegeben.
    kann man das auch etwas eleganter machen, also ohne die char-zwischenvariablen?
    danke.



  • Fix gebastelt und ungetestet:

    TCHAR myBuffer[MAX_PATH];
    TCHAR myPath[MAX_PATH];
    TCHAR myFile[MAX_PATH];
    GetModuleFileName(NULL, myBuffer, MAX_PATH);
    
    lstrcpy(myPath,myBuffer);   // Vollen Pfad nach myPath kopieren
    PathRemoveFileSpec(myPath); // Den Dateinamen aus myPath raus killen
    
    lstrcpy(myFile,myBuffer);   // Vollen Pfad nach myFile kopieren
    PathStripPath(myFile);      // Reinen Pfad aus myFile raus killen
    
    MessageBox(NULL,myFile,TEXT("Dateiname"),MB_OK);
    MessageBox(NULL,myPath,TEXT("Pfad"),MB_OK);
    


  • Script-Styler schrieb:

    jo, die lpFile-variable bekommt kein dateinamen ab.
    warum?
    ich hab ihr doch den pFilename gegeben.

    Wenn du dir folgende Zeile (der Code kommt mir so bekannt vor 😃 ) genauer betrachtest

    szPath[pFilename-szPath] = '\0';
    

    welche hier gleichbedeutend ist mit

    *pFilename = '\0';
    

    solltest du den 'Fehler' schon sehen.

    Um das ganze also auf zwei char Arrays zu begrenzen, Dateinamen nach szBuffer kopieren und dann erst den Inhalt der Anfangsadresse mit dem Dateinamen auf Null setzen

    lstrcpy(szBuffer, pFilename);
    *pFilename = '\0';
    

    Achtung der Pfad hat im Gegensatz zu geeky's Methode immer einen Backslash am Ende. Allerdings musst du hier gegen keine zusätzliche lib linken.


Anmelden zum Antworten