getcwd



  • Hallo zusammen,
    ich hoffe ich habe das richtige Froum ausgesucht.

    Ich habe ein Problem, und zwar muss ich den aktuellen Pfad, in der meine .exe Datei läuft abfragen, hierfür habe ich die Funktion getcwd entdeckt.
    Nur leider ist es so, dass mir ein \ im Ergebnis fehlt:
    Programm:

    char pfad [256];
    
    getcwd(pfad, sizeof(pfad));
    

    Ergebnis in Ordner Beispiel
    Soll: C:\Test\test2\
    Ist: C:\Test\test2

    Ergebnis direkt auf Laufwerk
    Soll: C:\
    Ist: C:\

    Wie bekommt man den \ auch in der Ordnerausgabe hin, ohne dass nachher in der Laufwerklösung

    C:\\

    erscheint?

    Danke im Voraus.

    Gruß Frank

    P.S.: C Kenntnisstatus: Anfänger

    GELÖST 130226
    Danke an alle.



  • Du musst überprüfen, ab das letzte Zeichen ein '\' ist.
    Die Länge bekommst du mit strlen.



  • ok,
    ich habe mir folgendes mal zusammengebaut, scheint auch zu funktionieren,
    weiß nur nicht ob es die sauberste Variante ist:

    char korrektur1[5]="\\"; 
        getcwd(pfad, sizeof(pfad));
        stringlaenge=strlen(pfad);
    
        if (pfad[stringlaenge-1] != '\\' && pfad[stringlaenge] != '\\')
            strcat(pfad, korrektur1);
    

    Vielleicht hat jemand noch eine bessere Methode.

    Gruß Frank



  • fheb schrieb:

    char korrektur1[5]="\\";
    

    5 !? Lass uns mal gemeinsam Zählen: 1: '\\' , 2: '\0' .

    fheb schrieb:

    if (pfad[stringlaenge-1] != '\\' && pfad[stringlaenge] != '\\')
    

    Da du sicher keinen Pfad mit zwei Backlashes hintereinander bekommst, wird das nie nicht wahr. Btw ist str[ strlen( str ) ] immer '\0' .

    // tagsoup.



  • fheb schrieb:

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

    Wozu?

    fheb schrieb:

    hierfür habe ich die Funktion getcwd entdeckt.

    Die tut das aber nicht.



  • 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.
    🙂



  • 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