Ini datei schreiben und auslesen bei TListView
-
hi
ich glaub du hast mich falsch verstanden...
ich wollte bei OnClose ALLE Items + 2 Subitems in die ini speichern.
Und bei formcreate die ini wieder auslesen
-
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
SchreibenTIniFile *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);=
FehlerZugriffsverletzung bei adresse 0040213d in modul "bla.exe".Lesen von adresse 000002f0kö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 nichtTListItem *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