[solved] GetModuleFileName und ifstream



  • Hi, das ist vielleicht eine dumme Frage, aber wie kann ich einen Pfad, der mir von GetModuleFileName() geliefert wurde, mit ifstream verwenden?

    Beispiel:

    MEMORY_BASIC_INFORMATION mbi; 
    VirtualQuery(DllMain, &mbi, sizeof(mbi)); 
    HMODULE libHandle =  reinterpret_cast<HMODULE>(mbi.AllocationBase); 
    wchar_t buffer[ MAX_PATH ] = {0};
    GetModuleFileName( libHandle, buffer, MAX_PATH );
    wchar_t drive[ _MAX_DRIVE ];
    wchar_t dir[ _MAX_DIR ];
    wchar_t filename[ _MAX_FNAME ];
    _wsplitpath_s( buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, filename, _MAX_FNAME, NULL, 0 );
    _wmakepath_s( buffer, MAX_PATH, drive, dir, filename, L".conf" );
    

    Das Codebeispiel dient dazu, den Pfad herauszufinden, in dem eine momentan geladene DLL liegt, in diesem Beispiel

    c:\instantclient\OCI.dll

    Diesen Pfad will ich entsprechend manipulieren, um eine dort liegende Konfigurationsdatei einzulesen,

    c:\instantclient\OCI.conf

    Das Problem ist aber nun, das ifstream, welches in einer externen Klasse zum Einsatz kommt, mit dieser Pfadangabe nichts anfangen kann (Escape-Characters).

    Der Pfad müsste entweder

    c:\\instantclient\\OCI.dll

    oder

    c:/instantclient/OCI.dll

    sein, um die Datei öffnen zu können.

    Gibt es eine Windows-Funktion, die mir diese Umwandlung ermöglicht? Oder muss ich manuell alle Backslashes in Slashes umschreiben?



  • Wenn du den String mit GetModuleFilename bekommst, musst du dich nicht mehr um die Backslashes kümmern. Du musst nur bei Strings, die du "manuell" im Quelltext schreibst, zwei Backslashes verwenden. Der String enthält dann allerdings nur ein Backslash.

    Ein Beispiel:

    char* str = "C:\\Windows\\...";
    printf("%s",str);
    

    Ausgabe:

    C:\Windows\...
    

    MfG, Jochen



  • Ja aber diesen String, den ich bekomme, kann ich mit ifstream nicht nutzen, der findet die Datei dann nicht.
    Es geht nur, wenn ich Doppelbackslashes nehme oder normale Slashes.
    Oder übersehe ich gerade was?



  • Ich habe nun dem ifstream ein wchar_t übergeben, und dann ging es. Hatte vorher einen normalen char* Typ.

    War wohl mein Fehler 🙂


Anmelden zum Antworten