Frage zu GetModuleFileName



  • Hallo, aus irgendeinem Grund wird mir der Pfad seltsam Ausgegeben:

    Programm Ausgabe:
    C:\Users\User\Documents\Embarcadero\Studio\Projekte.\Win32\Debug\Project4.exe

    Auf den ersten Blick sieht alles richtig aus aber hinter dem Wort Projekte steht dann: .\
    anstatt einfach nur \

    Ist an meinem Code irgendwas falsch?

    #include <windows.h>
    #include <string>
    #include <iostream>
    using namespace std;;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
     char buffer[MAX_PATH];
     string str;
     GetModuleFileName( NULL, buffer, MAX_PATH );
    
     cout<<buffer<<endl;
    
     return 0;
    }
    
    


  • Das ist wohl das Working Dir. Ich denke, das ist schon in Ordnung so.



  • Was ist denn der korrekte Pfad? Gibt es da wirklich einen Verzeichnis, das Projekte. heisst, oder gibt es da vielleicht noch einen extra Backslash, also Projekte\.\Win32?



  • Jein, nichts wichtiges:

    Zeile 4: 2 semicolons, wo nur eins muß.
    Zeile 10: Deklararation eines Variablen, die nie benutzt werden.

    Die sind aber nicht der Grund für Dein Problem.

    Wahrscheinlich hat Dein Rapidstudio ein paar "falsche" Pfade erzeugt. Prüfe mal Deine Compiler Optionen.



  • @Finnegan sagte in Frage zu GetModuleFileName:

    Gibt es da wirklich einen Verzeichnis, das Projekte. heisst

    Naja da muss man sich auf Windows schon ziemlich anstrengen um das zu schaffen. Ich weiss nicht ob man das über normale Usermode APIs überhaupt hinbekommt. Also genaugenommen weiss ich auch nichtmal ob man das mit NtCreateFile/ZwCreateFile hinbekommt.

    oder gibt es da vielleicht noch einen extra Backslash, also Projekte\.\Win32?

    Das wäre viel wahrscheinlicher.



  • @hustbaer sagte in Frage zu GetModuleFileName:

    Also genaugenommen weiss ich auch nichtmal ob man das mit NtCreateFile/ZwCreateFile hinbekommt.

    Naming Files, Paths, and Namespaces - Naming Conventions:

    Do not end a file or directory name with a space or a period. Although the underlying file system may support such names, the Windows shell and user interface does not. However, it is acceptable to specify a period as the first character of a name. For example, ".temp".



  • @Swordfish Ja, weiss ich 🙂 Nur weiss ich auch dass über Kernel-APIs oft viel mehr geht als über Usermode APIs.
    Als Beispiel für ähnliche Unterschiede wenn man sich noch weiter in richtung "High Level" begibt: Explorer lässt dich z.B. nichtmal ein File .foo nennen, da muss man schon cmd.exe bemühen.



  • @hustbaer sagte in Frage zu GetModuleFileName:

    @Swordfish Ja, weiss ich 🙂 Nur weiss ich auch dass über Kernel-APIs oft viel mehr geht als über Usermode APIs.
    Als Beispiel für ähnliche Unterschiede wenn man sich noch weiter in richtung "High Level" begibt: Explorer lässt dich z.B. nichtmal ein File .foo nennen, da muss man schon cmd.exe bemühen.

    Meiner Erfahrung nach ist es hauptsächlich der Explorer und darauf aufbauende UI-Elemente wie Öffnen/Speichern-Dialoge, weshalb ich auch unter Windows meistens mit Bash oder sowas unterwegs bin.

    Aber dier Kopieren-Fortschrittsbalken von Win10 ist echt nett (auch wenn ich am Ende doch wieder Bash nehme, da ich häufig cp -p benötige) 😉


Log in to reply