Problem mit dem speichern von Editfeldern



  • Hallo.

    Ich habe ein kleines Problemchen.

    Mal angenommen ich habe zwei Editfelder. Das erste Feld ist leer.
    Im zweiten steht ein Satz.
    Wenn ich das nun mit:

    file << Optionen->Edit1->Text.c_str() << "\n";
    file << Optionen->Edit2->Text.c_str() << "\n";
    

    speichere und anschliessend mit:

    file >> text1;
    Optionen->Edit1->Text = text1.c_str();
    file >> text2;
    Optionen->Edit2->Text = text2.c_str();
    

    lesen moechte dann steht in text1 das was in text2 stehen soll.
    Ausserdem wird im text2 nur bis zum ersten Leerzeichen gelesen.

    Wie kann ich das aendern?



  • Hallo

    Bei dieser Art zu lesen wird immer bis zum ersten Trennzeichen gelesen. Das geht also so nicht. Du könntest die Stringlänge mit abspeichern und dann binär lesen und schreiben. z.Bsp. so

    // Schreiben
    ofstream out("file.txt");
    int strsize =  astring.Length();
    out.write((char*)&strsize, sizeof(strsize));
    out.write(astring.c_str(), strsize+1);
    
    // Lesen
    ifstream in("File.txt");
    int strsize;
    in.read((char*)&strsize, sizeof(strsize));
    char *tstr = new char[strsize+1];
    in.read(tstr, strsize+1);
    astring = tstr;
    delete[] tstr;
    

    Ciao



  • Funktioniert so auch nicht
    Warum sollte ich auch die Stringlaenge mit angeben?
    Macht sich beim Ausdruck nicht so gut.



  • Ich habe den Fehler selber gefunden.

    file.getline((char *)text1.c_str(), 512);
    

    Recht unkompliziert 🙂



  • Wirklich unkompliziert wäre die Verwendung von TStringList::SaveToFile oder TIniFile ... 😉



  • Danke.

    Aber du weisst doch.
    Ich habe diese Macke: So wenige fremde Komponenten wie noetig und so viele eigene wie moeglich.


Anmelden zum Antworten