Ini datei schreiben und auslesen bei TListView



  • Die Antworten waren schon richtig, nur du bist völlig auf dem Holzweg. 😉
    Deine Codebeispiele lassen sich wegen des erwähnten fehlenden Indexes doch nichtmal compilieren.

    Davon abgesehen ist dein ListView beim Programmstart ja leer, da sind keine Items drin, denen dann nur noch Strings zugewiesen werden müssten.
    Für das Befüllen mit Items bist du selbst zuständig, und dabei erfolgt dann auch gleich die Zuweisung der Inhalte.

    TListItem *pItem = ListView1->Items->Add();
      pItem->Caption = "aus der Ini lesen";
      pItem->SubItems->Add("auch aus der Ini lesen");
      pItem->SubItems->Add("und nochmal ...");
    

    Allerdings halte ich eine Ini-Datei hier für weniger geeignet, da es nur sehr umständlich möglich ist (wenn überhaupt), die Einträge in eine Schleife auszuwerten.
    Besser wäre eine einfache Textdatei, bei der z.B. in jeder Zeile die Daten eines Items nebst SubItems stehen (per Semikolon getrennt, CSV eben). So eine Datei lässt sich mittels TStringList leicht in einer Schleife schreiben bzw. lesen.



  • jo is mir schon klar...
    aber wie gesagt ich will das wenn mehrere items in ter ListView sind alles in die ini speichern und das beim neustart wieder ReadString das die ListView wieder gefüllt wird



  • Hallo

    das beim neustart wieder ReadString das die ListView wieder gefüllt wird

    Da solltest du kein TIniFile nehmen, sondern wie Jansen geschrieben jat, eine eigene Datei aufmachen. Schau dir mal TFileSTream an.

    ]aber wie gesagt ich will das wenn mehrere items in ter ListView sind alles in die ini speichern

    Dazu mußt du das Array durchgehen

    for (int Lv = 0; Lv < Form1->ListView1->Items->Count; Lv++)
    {
      // speichere Form1->ListView1->Items->Item[Lv]->Caption in Datei
      }
    

    bis bald
    akari



  • cool mit dem speichern klappt jetzt alles!!THX!!
    ABER: ich bekomms immer boch nicht ausgelesen.
    ich probier es zur zeit erstmal mit etwas einfacheren und zwar
    Schreiben

    TIniFile *ini;
    ini = new TIniFile ("C:\\settings.ini");
    ini->WriteString("Pfad_cscrack", "Pfad", Edit1->Text);
    

    lesen

    TIniFile *ini;
    ini =new TIniFile ("C:\\settings.ini");
    ini->ReadString( "Pfad_cscrack", "Pfad", Form4->Edit1->Text);
    

    =
    Fehler

    Zugriffsverletzung bei adresse 0040213d in modul "bla.exe".Lesen von adresse 000002f0
    

    könnt ihr mir bitte helfen



  • Hallo

    da du nicht genau geschrieben hast, bei welcher Methode der Fehler kommt, kann ich dir nur mal denn Tip geben, Edit1 und Form4 zu untersuchen.
    Sieht so aus, als ob eines von beiden NULL ist.
    Siehe auch Debugger.

    bis bald
    akari



  • sry ich versteh das nicht ganz
    was meinst dumit NULL 😕



  • Hallo

    ich meine damit, das diese Pointer einen ungültigen Wert haben, weil sie auf kein gültige Instanz zeigen.
    Las dir vor dem WriteString mal den zu speicherden Wert irgendwo anzeigen.

    Übrigens halte ich

    ini->ReadString( "Pfad_cscrack", "Pfad", Form4->Edit1->Text);
    

    für verdächtig. meinst du vielleicht eher

    Form4->Edit1->Text = ini->ReadString( "Pfad_cscrack", "Pfad", "LEER");
    

    bis bald
    akari



  • jo danke klapt jetzt ich darf das nur nicht über formcreate laufen lassen.
    aber jetzt zu dem nächsten, und zwar listview das klappt noch nicht

    TListItem *NeuItem;
    NeuItem = Form1->ListView1->Items->Add();
    NeuItem->Caption = ini->ReadString("Server_"+ListView1->Items->Count,"Name", NULL);
    NeuItem->SubItems->Add(ini->ReadString("Server_"+ListView1->Items->Count,"Ip", NULL));
    

    kommt zwar kein fehler aber es passiert nichts



  • Steht denn überhaupt das richtige in deiner Ini-Datei? Findet sie dein Programm auch?



  • 1. kannst du den in das inifile reinschreiben?
    2. benutz doch mal den 3. parameter bei ReadString um fehler abzufangen...¨

    BigNeal


Anmelden zum Antworten