Wie finde ich den Pfad meiner exe



  • Hey, das mit den Anführungszeichen ist mir noch gar nicht aufgefallen.
    Abhilfe schafft dieser Code:

    CString strPath = CString( GetCommandLine()).Mid( 1, CString(GetCommandLine()).ReverseFind('\\')-1);
    

    Alternativ kann man auch nach der Zeile ein Replace machen:

    CString strPath = CString( GetCommandLine()).Left( CString(GetCommandLine()).ReverseFind('\\'));  
    strPath.Replace( "\"", "");
    

    @dEUs: Kannst die FAQ mal wieder updaten.



  • Was muss ich machen das Name.exe am Pfad dran bleibt.



  • Ein wenig mitdenken!!
    Schau, was GetModulFileName macht, der Rest sollte dann klar sein!



  • Ich habe schon einiges versucht z.b 1und -1 zu löschen uns so weiter.Aber dann bekomme ich z.b nur den exen namen und nicht mehr den pfad usw.



  • Also man sollte doch mal gnädig sein und es ihm sgane wenn er es nicht so kapiert, oder?
    Hier mal so ähnlich wie in der FAQ:

    const DWORD dwBuffer = 100;                            
        char strPath[dwBuffer] = "";
        CString strBuffer = "";
        int nPoint = 0;
    
        //Finden des Pfades in der sich die exe befindet.  
        //Speicherung des Pfades in die
        //Membervariable m_strFilePath  
    
        nPoint = GetModuleFileName(NULL,strPath,dwBuffer);
        //holt sich den Pfad der Anwendung + Dateinamen
        strPath[nPoint-11] = '\0';//schneidet den Dateinamen der Anwendung
        // ab, musst die Anzahl der Stellen wissen. Also Dateinamen 
        // + Endung, hier support.exe == 11 Stellen
        strBuffer = (CString) strPath;
    

    So dass müsste dir doch helfen oder? 😃



  • Ja sowit war ich auch schon nur der name der exe ist variabel.



  • Da ja irgendwie manche die FAQ nicht verstehen 😕 :

    CString GetModulePath(HMODULE hmod=0,bool fullPath=false)
    {
        CString str;
        GetModuleFileName(hmod,str.GetBuffer(MAX_PATH),MAX_PATH);
        str.ReleaseBuffer();
        if(!fullPath)
        {
            int pos=str.ReverseFind('\\');
            if(pos!=-1)
                str.Delete(pos,str.GetLength()-pos);
        }
        return str;
    }
    

    /E: Beispiel:

    void CTestDlg::OnOK() 
    {
        AfxMessageBox(GetModulePath()); // Nur der Pfad
        AfxMessageBox(GetModulePath(0,true)); // Pfad+Exe
        // oder:
        CString meinPfad=GetModulePfad();
    }
    

    [ Dieser Beitrag wurde am 27.08.2002 um 13:52 Uhr von Nemesyzz editiert. ]



  • error C2601: 'GetModulePath' : Lokale Funktionsdefinitionen sind unzulaessig



  • Dann hau die Funktion halt in die Klasse, wenn der VC++ das nicht auf die Reihe bekommt. Wenn ich mir das alles anschaue, dann lobe ich mir wirklich die VCL.



  • Die Fehlermeldung kommt, weil du irgendwo ne schliessende geschweifte Klammer (}) vergessen hast.


Anmelden zum Antworten