Announcement

Collapse
No announcement yet.

Objekte in Dateien speichern und aus Dateien laden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Objekte in Dateien speichern und aus Dateien laden

    Folgendes Problem stellt sich, ich habe eine Klasse mit String und int Attributen. Die erzeugten Objekte dieser Klasse (in einer Liste gespeichert) möchte ich gerne in eine Datei speichern. dazu benutze ich zur zeit die <b>iostream - Klasse</b>.
    <br> Mit der Methode write((char*) Objekt, sizeof(Objekt)) speicher ich das jeweilige Objekt in die entsprechende Datei.
    Mit der Methode read((char*) Objekt, sizeof(Objekt)) lese ich das Objekt wieder aus. So ist es in einem Beispiel erklärt, dies funktioniert
    nicht richtig. Das geladenen Objekt wird falsch initialisiert.

    Memberfunktionen der Klasse dessen objekt ich speichern möchte

    void Speichern(ostream &ostr_obj)
    {
    ostr_obj.write((char *) this, sizeof(this));
    }

    int Laden(istream &istr_obj)
    {
    Objekt o;
    if(!(istr_obj.read((char *) &o, sizeof(o)))) return 0;
    *this = o;
    return 1;
    }

    Grüße

    Gerd

  • #2
    Welche Programmiersprache ??

    Falls MSVC++
    Leite dein Objekt von der Klasse CObject ab.
    Überschreibe die Serialize()-Methode des Objekts.
    Erzeuge eine Instanz der Klasse CArchiv.
    Ruf die Serialize Methode auf !!
    Fertig

    Comment


    • #3
      Ich suche nach ähnlichen Klassen/Methoden beim CBuilder 3.0

      Grüße

      Ger

      Comment


      • #4
        in der write/read - methode der folgende Quelltext läuft:

        Person *writeP = new Person();

        out.write((char*) writeP, sizeof *writeP);

        Person *loadP = new Person();

        in.read((char*) readP, sizeof *readP);

        Mann muss darauf achten, wenn mann ein sizeof objekt macht, dann bekommt mann die größe des Zeigers auf das Objekt mit *Objekt bekommt mann die Größe des Objektes.
        Das casten des Objektes funktioniert indem mann das Objekt casted und nicht den Inhalt des Objektes. Ein bischen verwirrend das ganze, aber so funzt es.

        Grüße

        Ger

        Comment


        • #5
          Hallo,

          ich habe folgendes Problem:

          Habe unter Borland C++ Builder ein kleines Programm mit ca. 160 Eingabefelder, ComboBoxen etc. erstellt.
          Wie schaffe ich es hier nun, ohne jeden einzelnen Wert auszulesen, das gesamt als ein Object zu speichern und später dann auch wieder einzulesen?

          Wenn jemand hierüber ein kleines Beispiel-Proggy hätte, das wäre super genial.

          Vielen Dank

          Sve

          Comment


          • #6
            Danke,

            das Problem hat sich mitlerweiler erledigt. Wusste nicht,
            das dieses doch so einfach zu realisieren ist.

            Danke
            Sve

            Comment


            • #7
              Hallo Sven,

              mich würde interessieren, wie Du das gelöst hast.

              Vielen Dank im voraus,
              Thoma

              Comment


              • #8
                Hallo,

                Ich bin mir sicher, das es eine bessere und einfachere lösung gibt.
                Aber so klappt es immerhin :-)
                Da ich noch anfänger bin:-), seien mir an dieser Stelle Fehler verziehen. Aber wer eine perfekte Lösung hat...

                Gruss
                Sven

                struct alleDaten{ // man könnte auch eine class nehmen
                char name[25];
                char vname[24];
                };

                void setData(
                alleDaten ad;
                ad.name="jkhkljkl";
                ad.vname="jkljkl";
                )

                void saveDate(
                ofstream outW(newFile, ios:ut | ios::binary);
                if(!outW){
                ........
                }
                outW.write((char *) &ad, sizeof(struct alleDaten));
                outbal.close();
                )

                void readData(
                struct alleDaten ad;
                ifstream inW(newFile, ios::in | ios::binary);
                if(!inbW){
                .......
                }
                inbal.read((char *) &ad, sizeof(struct alleDaten));
                name = ad.name;
                vname = ad.vname;

                Comment

                Working...
                X