getcwd



  • MFK schrieb:

    fheb schrieb:

    Ich habe ein Problem, und zwar muss ich den aktuellen Pfad, in der meine .exe Datei läuft abfragen

    Wozu?

    Weil ich mir einen Pfad inklusive Dateiname zusammenbauen muss, der mit statischen Elementen befüllt wird und mit einer Variablen, die der User eingeben soll, um danach etwas zu öffnen.

    fheb schrieb:

    hierfür habe ich die Funktion getcwd entdeckt.

    Die tut das aber nicht.

    welche tut es dann?

    Ausserdem finde ich es etwas mieß hier nur so Brocken zu lesen
    "Warum"---
    "Tut es nicht"
    Dann schreibt doch eine Lösung oder lasst es bleiben.
    Oben steht mein Problem!
    Dann erwarte ich hier im Forum eine freundliche Hilfe und keine Würfelhusten, wie es bis jetzt der Fall war!



  • tuer schrieb:

    das sollte es tun

    #include <windows.h>
    #include <TCHAR.H>
    
    int main(void)
    {
        TCHAR path[MAX_PATH];
    	if( 0 != GetModuleFileName( NULL, path, MAX_PATH ))
     		_tprintf(path);
    	_tprintf(TEXT("\n"));
    	system ( "pause ");
        return 0;
    }
    

    den backslash da dranne backen überlass ich dir.
    🙂

    Nehmt euch ein Beispiel an tuer!!
    Danke dir, das werde ich versuchen.



  • Kann mich irren. Aber werden hier nicht betriebsystenabhängige Lösungen gezeigt?
    Und niemand schreibt bisher etwas zum Betriebssystem?



  • tuer schrieb:

    das sollte es tun

    #include <windows.h>
    

    f.-th. schrieb:

    Kann mich irren. Aber werden hier nicht betriebsystenabhängige Lösungen gezeigt?
    Und niemand schreibt bisher etwas zum Betriebssystem?

    man könnte meinen, das du eventuell nicht ganz unrecht hast 😃



  • Kannst du nicht einfach das vorletzte Zeichen überprüfen?
    Wenn es kein ':' ist, dann häng ein '\' an, andernfalls nicht.



  • ok so funktioniert es, dass ich egal ob die .exe Datei direkt auf C:\
    oder in einem Ordner liegt C:\Test\
    der \ sichtbar im printf des Pfades ist:

    getcwd(pfad, sizeof(pfad));
    stringlaenge=strlen(pfad);
    
        if (pfad[stringlaenge-1] != '\\')                                 
            strcat(pfad, korrektur1);
    
    printf("Aktueller Pfad: %s\n", pfad);
    

    Danke. 👍



  • fheb schrieb:

    ok so funktioniert es, dass ich egal ob die .exe Datei direkt auf C:\
    oder in einem Ordner liegt C:\Test\
    der \ sichtbar im printf des Pfades ist:

    getcwd(pfad, sizeof(pfad));
    stringlaenge=strlen(pfad);
    
        if (pfad[stringlaenge-1] != '\\')                                 
            strcat(pfad, korrektur1);
    
    printf("Aktueller Pfad: %s\n", pfad);
    

    Danke. 👍

    du hast offensichtlich immer noch nicht kapiert, was dir MFK mitteilen wollte.
    gcwd liefert dir den pfad des aktuellen arbeitsverzeichnisses, das muss nicht das verzeichnis der exe sein.



  • achsojajaistklar schrieb:

    fheb schrieb:

    ok so funktioniert es, dass ich egal ob die .exe Datei direkt auf C:\
    oder in einem Ordner liegt C:\Test\
    der \ sichtbar im printf des Pfades ist:

    getcwd(pfad, sizeof(pfad));
    stringlaenge=strlen(pfad);
    
        if (pfad[stringlaenge-1] != '\\')                                 
            strcat(pfad, korrektur1);
    
    printf("Aktueller Pfad: %s\n", pfad);
    

    Danke. 👍

    du hast offensichtlich immer noch nicht kapiert, was dir MFK mitteilen wollte.
    gcwd liefert dir den pfad des aktuellen arbeitsverzeichnisses, das muss nicht das verzeichnis der exe sein.

    Doch, denke schon dass ich es soweit als Anfänger kapiert habe.
    In meinem Fall sollen die Anwender die .exe genau in das Verzeichnis kopieren, in dem die drei zu bearbeitenden Dateien stehen, somit passt es ja...?

    Nur am Rand, welche Funktion macht es anders? Get...irgendwas?



  • fheb schrieb:

    Nur am Rand, welche Funktion macht es anders? Get...irgendwas?

    ja.
    🙂



  • f.-th. schrieb:

    Kann mich irren. Aber werden hier nicht betriebsystenabhängige Lösungen gezeigt? Und niemand schreibt bisher etwas zum Betriebssystem?

    Eigentlich wohl. Aus Anfänger und .exe würde ich auf Windows (oder DOS ?) schliessen.
    Verschieben nach WinAPI wäre sinnvoll, wenn man das so kleinlich sehen will.

    fheb schrieb:

    Ich habe ein Problem, und zwar muss ich den aktuellen Pfad, in der meine .exe Datei läuft abfragen, ...

    Tatsächlich werden hier aber zwei Frage gestellt:

    1. Wie ermittelt man den aktuellen Pfad ?

    Dafür kann man getcwd verwenden, das ist einigermassen systemunabhängig da POSIX

    2. Wie ermittelt man den Pfad der ausführbaren Datei ?

    a) Unter Linux z.B. im Prozessdateisystem nachsehen

    char path[MAX_PATH];
       readlink ("/proc/self/exe", path, MAX_PATH)
    

    b) Unter Windows (ANSI)

    char path[MAX_PATH];
       GetModuleFileNameA( NULL, path, MAX_PATH );
    

    PS: Wie bei Systemaufrufen üblich sollte man natürlich das Ergebnis prüfen.


Anmelden zum Antworten