txt Datei in Listview laden
-
Hallo Community!
Ich habe jetzt meine Apllication fertig und läuft auch so wie es soll,aber da ist leider ein kleiner Bug drin.Ich habe ein Formular wo ein Listview drauf ist und 2 Buttons zum laden der datei und einem zum hinzufügen eines Items ins Listview und noch ne Tedit Box.Wenn ich jetzt die Datei lade,wird diese auch ins Listview geladen,aber wenn ich dann noch ein Item per Formular ins Listview adde,habe ich eine Leerzeile dazwischen.Ich würde gerne das diese Leerzeile verschwindet.
Wenn ich die Datei dann nochmal lade stehen wiede ralle unter einander ohne freiraum dazwischen.
void __fastcall TForm2::realmManager(String mode) { if ( mode == "w" ) { if (txtRealm->Text.Length() == 0) { ShowMessage("Du musst einen Realm eintragen!"); } else { char sFile[20] = "realmlist.txt"; fstream file(sFile, ios::out|ios::app); if (file.good()) { file << txtRealm->Text.c_str() << endl; lv->AddItem(txtRealm->Text, lv); } else { ShowMessage("Fehler beim öffnen der Datei!"); file.close(); } file.close(); } } else { char sFile[20] = "realmlist.txt"; fstream file(sFile, ios::out|ios::in); char buffer[255]; if (file.good()) { while(!file.eof()) { file.getline(buffer, sizeof(buffer)); lv->AddItem(buffer, lv); } cmdLoad->Enabled = false; cmdAddRealm->Enabled = true; } else { ShowMessage("Fehler beim öffnen der Datei!"); file.close(); } file.close(); } }
-
Hallo
Das Problem dürfte sein das du zwischen dem Lesen einer Zeile und dem Hinzufügen eines Items nochmal Prüfen must ob denn das Lesen überhaupt geklappt hat
while(!file.eof()) { file.getline(buffer, sizeof(buffer)); if (file) lv->AddItem(buffer, lv); }Es ist übrigens einfacher und eleganter mit std::string/AnsiString zu arbeiten anstelle von char[255]. Dann fällt auch diese künstliche Grenze von 255 Zeichen pro Zeile.
bis bald
akari
-
Danke das hat geklappt.Ich hoffe ich habe das jetzt richtig verstanden das der Prüft ob das getline was ausgelesen hat?
Wegen dem String,das geht nicht,weil die getline Funktion einen char erwartet.
-
Hallo
storage schrieb:
Danke das hat geklappt.Ich hoffe ich habe das jetzt richtig verstanden das der Prüft ob das getline was ausgelesen hat?
Richtig. Erst nach dem Lesen weißt du ob das Lesen geklappt hat. Die Reihenfolge muß also immer sein
- Lesen
- Überprüfen
- Wenn Korrekt verarbeiten
und nicht
- Wenn Korrekt weiter
- Lesen
- VerarbeitenWegen dem String,das geht nicht,weil die getline Funktion einen char erwartet.
Du must natürlich eine andere Methode verwenden.
#include <string> std::string buffer; while(!file.eof()) { std::getline(file, buffer); if (file) lv->AddItem(buffer.c_str(), lv); }Nun ist dir Länge der Zeile egal.
bis bald
akari
-
Sauber funktz jetzt alles.thx
Ich habe mich auch erst vor kurzem mit "Datein Lesen und Schreiben" beschäftigt,weil ich es vorher nie brauchte.