kostenloser Webspace werbefrei: lima-city


C++: Pfad der exe?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    j***e

    Wei? jemand von euch, wie ich den Pfad der exe, an der ich schreibe, w?hrend des Programmablaufes in eine Variable abspeichern kann?

    Also: exe holt sich den Pfad, speichert in string ab, vergleicht zb. mit anderem string


    btw.

    Windows XP
    Dev-C++ v4 Standardeinstellungen
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 0******a

    Soooo... gegessen (lecker Fleisch *g*), diverse User angeschrieben, massenhaft Posts gel?scht und jetzt bin ich f?r dich da ;-)

    Also... in ANSI C gibt es daf?r Funktionen, in ISO C++ nicht. Aber kannst die Funktionen ja trotzdem benutzten, ich muss nur bisschen klugscheissern.

    Unter Linux (nur der Vollst?ndigkeit halber) und Windows ist das aktuelle Verzeichnis das Verzeichnis, in dem die ausf?hrbare Datei liegt. Solange also nicht irgendwo in deinem Programm die Funktion chdir() benutzt wird, kannst du das Verzeichnis der ausf?hrbaren Datei mit dem des aktuellen Verzeichnises gleichsetzen.
    Aktuelles Verzeichnis auslesen:
    Einfach die Funktion getcwd() benutzen.

    char * getcwd(char * puffer, int laengedespuffers);

    Der Return ist einfach nur ein Zeiger auf den Puffer, den man ?bergibt.

    Anwendungsbeispiel:

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

    if (pfad == NULL) { /* irgendein fehler passiert */ ; }
    else // irgendwas mit dem Pfad machen

    Bei manchen Compilern ist der zweite Parameter nicht als int sondern als size_t definiert, was nat?rlich sinnvoller ist.


    //Judge: thx :biggrin:
  4. Tritt hier aber nicht das Problem auf wenn ich die Anwendung mit einer Verkn?pfung aufrufe und hier z.B. bei Ausf?hren in C:\ drin steht wird mit der Funktion nur C:\ und nicht der Pfad in dem die Anwendung ist zur?ck gegeben?

    Unter VC++ hab ich das Problem so gel?st weis aber net ob das auch unter Dev-C++ funzt.

    char buffer[MAX_PATH];
    GetModuleFileName(NULL,buffer,MAX_PATH);
    LPSTR sFileName = _tcsrchr(buffer,'\\')+1;
    *sFileName = '\0';

    buffer enth?lt nun den Pfad

    oder man macht es so

    char buffer[MAX_PATH];
    strcpy(buffer,argv[0]);
    LPSTR sFileName = _tcsrchr(buffer,'\\')+1;
    *sFileName = '\0';

    *edit* ich glaub hab was falsch verstanden will er nun den Pfad in dem die EXE liegt oder den Pfad in dem die EXE ausgef?hrt wird?
  5. 0******a

    funkdoobiest schrieb:
    ich glaub hab was falsch verstanden will er nun den Pfad in dem die EXE liegt oder den Pfad in dem die EXE ausgef?hrt wird?

    Das ist eine gute Frage, da habe ich auch nicht dran gedacht, aber soweit ich es weiss, war er mit der ersten Antwort bereits zufrieden. Mag aber auch daran liegen, dass er das von dir aufgeziegte Problem nicht bedacht hat. Na ja, nun hat er ja beide L?sungen.
    Noch zwei Korrekturen zum Code:
    Benutzt man die Funktionen _t*, dann sollte man die verwendeten Variablentypen ebenfalls anpassen, also:
    _TCHAR buffer[...];

    Ausserdem sollte man dem Puffer noch ausreichend Platz f?r die abschliessenden Null-Bytes einr?umen (also MAX_PATH + 2, damit der Pfad auf jeden Fall auch bei Kompilierung als Unicode-Applikation noch genug Platz hat).

    Und statt strcpy() im zweiten Beispiel sollte _tcscpy() benutzt werden.

    Ich weiss nicht, ob _tcsrchr() und auch der Rest der _t*-Funktionen von von Dev-C++ unterst?tzt wird (falls nicht, sollte man halt strrchr() und die restlichen, korrespondierenden ANSI-Funktionen und -Variablentypen benutzen), aber GetModuleFileName() kann man ansonsten auch aus der kernel32.dll exportieren.

  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!