Pfad der .exe ermitteln.



  • @ Chew-z nutz nix, das ganze ist in einer DLL, nix mit main
    Danke trotzdem

    @ Delryn : sieht kompliziert aus, kannste das mal kurz erläutern?
    Speziell wo dann mein String steht mit dem Pfad.

    deine include dateine?? wo kommen die her, mein Programm findet die nicht
    in der letzten Zeile gibst du den String aus stimmt?



  • Problem gelöst, Forum suche hilft halt doch.

    habe da folgenden link entdeckt
    http://www.winapi.net./index.php?inhalt=s14

    Jetzt habe ich aber immer noch ein Problem, die Funktion GetModulFileName gibt mir den gasamten Pfad der Anwendung zurück:
    C:\....\Testordner\text.exe

    Ich möchte aber nur C:\....\Testordner\ wie kann ich das realisieren?

    EDIT: Wie doof muss man sein, es wird auf der selben Seite erklärt 😃



  • Ich hab diesen Schnipsel von der Beispielseite wo boost::filesystem erklärt wird 🙂

    Es wird eine Instanz vom Typ path mit dem Pfad initialisiert von dem aus die Exe gestartet wurde, bzw. initial_path() liefert dir das:

    current_path

    path current_path();

    Returns: The current path as maintained by the operating system.

    Postcondition: current_path().is_complete()

    Note: The equivalent POSIX function is getcwd(). The equivalent Windows function is GetCurrentDirectoryA().

    Warning: The current path maintained by the operating system is in-effect a dangerous global variable. It may be changed unexpectedly by a third-party or system library function, or by another thread. For a safer alternative, see initial_path().

    Rationale: Although dangerous, the function is useful in dealing with other libraries. The current_path() name was chosen to emphasize that the function returns a complete path, not just a single directory name.

    Dafür bräuchtest du aber boost 🙂



  • @ bigborre
    an deiner seite muss man sich irgentwie einloggen



  • Selber machen 😉

    void CutEndOfString (char *lpString, char *lpStringToCut)
    {
        int iStringLength = strlen (lpString);
        int iCharsToCut = strlen (lpStringToCut);
        if (iStringLength < iCharsToCut)
        {
            strcpy (lpString, "");
            return;
        }
    
        int iCutting = iStringLength - iCharsToCut;
    
        int i = iStringLength;
        while (i > iCutting)
        {
            lpString[i] = ' ';
            --i;
        }
    
        lpString[i] = '\0';
    }
    
    char *FormatFileString (char *fileString)
    {
        int iLen = lstrlen (fileString);
        if (iLen > MAX_PATH)
            return NULL;
    
        char *data = new char[MAX_PATH];
    
        int f = 0;
        for (int i = (iLen - 1); fileString[i] != '\\'; --i, ++f)
            data[f] = fileString[i];
    
        data[f] = '\0';
    
        iLen = lstrlen (data);
        if (iLen > MAX_PATH)
            return NULL;
    
        char *result = new char[MAX_PATH];
    
        f = 0;
        for (int i = (iLen - 1); i >= 0; --i, ++f)
            result[f] = data[i];
    
        result[f] = '\0';
    
        delete [] data;
    
        return result;
    }
    
    char *FormatPathString (char *fileString)
    {
        LPSTR lpString = FormatFileString (fileString);
        CutEndOfString (fileString, lpString);
    
        return fileString;
    }
    

    Das sind 3 Funktionen, die ich mal gebastelt habe.
    Wie sauber diese sind, könnt ihr ja mal beurteilen jedenfalls funktionieren sie einwandfrei 🙂



  • gibts nicht ne fkt namens "rfind" oder so was? ^^
    ging eigtl so in etwa:

    string pfad = gesamter_pfad.substring (1, gesamter_pfad.rfind ("\\"));
    

    hf 😉



  • bigborre schrieb:

    @ Chew-z nutz nix, das ganze ist in einer DLL, nix mit main
    Danke trotzdem

    @ Delryn : sieht kompliziert aus, kannste das mal kurz erläutern?
    Speziell wo dann mein String steht mit dem Pfad.

    deine include dateine?? wo kommen die her, mein Programm findet die nicht
    in der letzten Zeile gibst du den String aus stimmt?

    DLL...hmmm...hört sich ganz nach windows an.
    dann kannste auch gleich microsoft spezifische funktionen benutzen:

    #include <direct.h>  
    	#include <windows.h>  
    
    	char cwd[MAX_PATH+1];
    	_getcwd(cwd,MAX_PATH);
    
    	cout << cwd << endl;
    

    🙂



  • GetModuleFileName



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ...



  • Problem gelöst, Forum suche hilft halt doch.

    habe da folgenden link entdeckt
    http://www.winapi.net./index.php?inhalt=s14

    Jetzt habe ich aber immer noch ein Problem, die Funktion GetModulFileName gibt mir den gasamten Pfad der Anwendung zurück:
    C:\....\Testordner\text.exe

    Ich möchte aber nur C:\....\Testordner\ wie kann ich das realisieren?

    EDIT: Wie doof muss man sein, es wird auf der selben Seite erklärt 😃

    Funktion _splitpath http://msdn.microsoft.com/de-de/library/e737s6tf%28v=vs.80%29.aspx



  • agga ugga schrieb:

    DLL...hmmm...hört sich ganz nach windows an.
    dann kannste auch gleich microsoft spezifische funktionen benutzen:

    Was aber auch ziemlich erstaunlich ist in einem Forum mit dem Titel WinApi!



  • Ich schmeiße mal noch PathRemoveFileSpec in den Thread 😉


Anmelden zum Antworten