GetPrivateProfileInt für lokale ini-Datei?



  • GetPrivateProfileInt ist bestens geeignet für das Auslesen von ini-Dateien. Leider hat die Funktion die Macke, dass die ini-Datei ohne Pfadangabe im Windows-Verzeichnis liegen muss. Dort schlagen aber zumeist Zugriffsschutzmechanismen zu.

    Ein Verzeichnis C:\ hat wohl jeder PC, so dass dieses geht:

    int MAPSIZE = GetPrivateProfileIntA("map", "mapsize", 18, "C:\\crazyCity.ini");
    

    Aber auch bei C:\ wird man von Programmen wie AVG Antivirus bei der Bearbeitung gequält.

    Ich möchte nicht gleich mit einer xml-Datei und komplexer Node-Verwaltung (z.B. Tiny-XML) anrücken, sondern diese ini-Datei am liebsten lokal zur exe legen. Wie geht so etwas?



  • Kennst du nicht den Trick?

    int MAPSIZE = GetPrivateProfileIntA("map", "mapsize", 18, "./crazyCity.ini");
    

    Wenn du im Programm das WorkingDirectory änderst (z.B. mittels eines FileOpen-Dialogs) solltest du natürlich besser das Verzeichnis der EXE ermitteln und dessen Pfad speichern, um dann einen absoluten Pfad zu erzeugen und diesen dann der obigen Funktion mitgeben.

    Und bei einer Verknüpfung (LNK) sollte dann auch das passende WorkingDirectory eingestellt sein. Dies hat aber auch den Vorteil, daß man evtl. mit verschiedenen INI-Dateien (in verschiedenen Verzeichnissen) arbeiten kann.



  • Th69 schrieb:

    Wenn du im Programm das WorkingDirectory änderst (z.B. mittels eines FileOpen-Dialogs) solltest du natürlich besser das Verzeichnis der EXE ermitteln und dessen Pfad speichern, um dann einen absoluten Pfad zu erzeugen und diesen dann der obigen Funktion mitgeben.

    Nicht nur dann.
    Sagt ja keiner dass das Working-Directory jemals das .exe File Verzeichnis war.

    => http://stackoverflow.com/questions/1528298/get-path-of-executable

    Bzw. wer das selbe mal für .bat Files braucht: "%~dp0" hilft.


  • Mod

    Lokal zur EXE ist gar keine gute Idee seit UAC.

    Besser:
    FOLDERID_LocalAppData
    FOLDERID_ProgramData
    FOLDERID_UserProgramFiles



  • Danke für die vielen Informationen. Sehr hilfreich. 🙂


Log in to reply