Ini Files



  • hi!

    ich habe ein kleines projekt mit der CLX gemacht, und jetzt soll es verschiedene skins bekommen. ich habe mir überlegt die konfiguration in Ini files zu speichern.
    hier der code:

    TIniFile* Ini = new TIniFile("skins.ini");
    
    Ini->WriteBool("skins", "alloy", 1);
    Ini->WriteBool("skins", "windows", 0);
    

    ich hab im EasyDelphiHelper (jaja....noch aus delphi zeiten^^), dass die datei neu angelegt wird, wenn sie nicht vorhanden ist.
    dem ist aber nicht so 😞
    also habe ich sie manuell angelegt.
    und dann, wie im code gezeigt, versucht ein paar werte zu ändern.
    das funktioniert jedoch überhaupt nicht!
    was ist daran falsch? 🙄

    mfg Olf



  • die datei wird so automatisch im windowsverzeichnis gespeichert.

    ini = new TIniFile(ExtractFilePath(Application->ExeName) + "skins.ini");
    

    so sollte es gehen



  • @tuxman

    So wie olf den Code gepostet hat, funktioniert er auch wunderbar, weil die Ini-Datei dann im Porjektordner bzw. dort anglegt wird, wo sich die Ausführende Exe-Datei befindet. Ich weiß nur w



  • bei mir eben nich. wen ich es so mache,

    TIniFile* Ini = new TIniFile("skins.ini");
    

    liegt die ini dann immer im windowsverzeichnis. um sie in das projektverzeichnis zu bekommen, mach ichs immer so wie ich schon geschrieben hab.



  • Wer lesen kann ist klar im Vorteil. In der Hilfe zu TIniFile steht klar und deutlich, daß die Ini-Datei default-mäßig im Win-Verzeichnis angelegt wird.



  • sag ich doch 😉 😃



  • ini = new TIniFile(ExtractFilePath(Application->ExeName) + "skins.ini");

    ist falsch.
    dann erhält ini ja den pfad von
    C:\Programme\MeinProg\Prog.exeskins.ini 😉
    das kann also nicht stimmen.
    es funkt auch nicht 😞 😞

    was nu?
    mfg Olf



  • oops



  • hast du es überhaupt ausprobiert???
    mit ExtractFilePath() kriegst du nur den pfad der EXE datei



  • natürlich habe ich es ausprobiert!!
    ich saß 2 tage davor!!!

    aber ich bekomme pfad + datei.exe
    😕
    mfg Olf



  • olf schrieb:

    aber ich bekomme pfad + datei.exe

    Mit Sicherheit nicht, es sei denn, du verwendest

    ini = new TIniFile(Application->ExeName + "skins.ini");
    

    o.ä., also ohne das ExtractFilePath.

    Eventuell hilft dir aber auch das hier weiter.



  • doch!

    ich bekomme den pfad + exe 😉

    ich habe es probiert mit

    ShowMessage(ExtractFilePath(Application->ExeName));

    und da kam C:\....\Olf\Desktop\Prog.exe raus 😉

    mfg Olf



  • Hallo olf,

    bitte prüfe das erneut.
    Ich hab' etliche Programme im Einsatz in denen ich ExractFilePath(Applicatin->ExeName) verwende. Diese Funktion wird bei uns firmenweit etliche hundert Mal täglich aufgerufen. UND NOCH NIE ist das von Dir beschriebene Verhalten aufgetreten. Bist Du sicher, dass Du den Code tatsächlich wie unten beschrieben aufrufst??? Versuch's doch bitte mal in einem ganz neuen Projekt. Irgendetwas kann da nicht stimmen.

    Und seit wann legt man Programme auf den Desktop, da gehören bestenfalls Verknüpfungen zu Programmen hin. 🙂



  • ich benutze die finktion auch in vielen progs, und immer hats geklappt



  • Ich verwend die Funktion auch überall. Ist immer schon einwandfrei gegangen.



  • Evtl. hat der Builder dein Projekt noch nicht aktualisiert (TempFiles löschen) oder dein exe-Name könnte zu Problemen führen (unwarscheinlich).

    -> mehr Details!



  • du kannst den Pfad zur exe auch mit GetCurrentDirectory raus bekommen, zum beispiel so:

    char szBuffer[MAX_PATH];
    
    GetCurrentDirectory(MAX_PATH, (LPSTR) szBuffer);
    //z.b. szBuffer = "C:\myApps\myProgramm";
    
    //und ich würde dann so weiter machen:
    
    strcat(szBuffer, "\\meine.ini");
    //z.b. szBuffer = "C:\myApps\myProgramm\meine.ini";
    
    ini = new TIniFile(szBuffer);
    
    //usw....
    

    Du findest GetCurrentDirectory in der Winbase.h, bzw Windows.h.

    MFG Hacke



  • GetCurrentDirectory liefert nicht den Pfad zum Installationsverzeichnis, sondern den zum Arbeitsverzeichnis. Letzteres kann sich durch verschiedene Aktionen (z.B. Dateiauswahl per OpenDialog) während der Programmausführung ändern.

    Ich kann zwar nach wie vor nicht glauben, dass ExtractFilePath bei olf nicht korrekt funktioniert (richtige Anwendung vorausgesetzt), aber natürlich kann man das zur Not auch ohne grosse Probleme selbst extrahieren.

    String GibDateiPfad(String FullName)
    {
      int pos = FullName.LastDelimiter("\\");
      if (pos)
        return FullName.SubString(1, pos);
      else
        return 0;
    }
    

Anmelden zum Antworten