struct aus Datei ein und auslesen!



  • Hallo, ich hab folgenden code

    SaveFile.open(FilePath.c_str(), ios_base::out|ios_base::binary|ios_base::app);
    SaveFile.write(reinterpret_cast<char*>(&Set),sizeof(Settings));
    SaveFile.close();
    

    Der Teil functioniert, aber wie bekomme ich die Daten wieder zurück in struct??

    LoadFile.open(FilePath.c_str(), ios_base::in|ios_base::binary);
    LoadFile.read(// hier ist mein problem);
    

    Ich hoffe mir kann jemand helfen.



  • Hallo

    LoadFile.read(reinterpret_cast<char*>(&Set), sizeof(Settings));
    

    /Edit : Bachte aber das dieses Verfahren nur funktioniert, solange das struct nur PODS enthält. Bei höheren Datentypen (AnsiString) oder Pointern (TObject*) innerhalb der Struktur bekommst du nur Datenfragmente.
    Ein besserer Weg ist es, die Operatoren << und >> für dein Struct zu überladen, so das du ordentlich alle Member in den Stream schreiben und lesen kannst.

    bis bald
    akari



  • Mein struct sieht so aus.

    struct Settings{
                    AnsiString SaveName;
                    AnsiString InputFile;
                    AnsiString OutputFile;
                    AnsiString PartName;
                    int DimensionIn;
                    int DimensionOut;
                    int Status;
                    int Sidewards;
                    bool Angle;
                    AnsiString PinSites;
                    bool PinOnly;
            };
    

    Dann muß ich wohl das mit dem überladen versuchen,
    Danke für die schnelle antwort.



  • so ich nochmal,
    kannst du mir ein beispiel zeigen wie du das mit dem Überladen meinst?
    Ich glaub ich bin auf dem falschen Weg,
    du hast nicht das gemeint, oder?

    SaveFile << Set.SaveName.c_str();
    

    Da könnte ich mir ja struct sparen.



  • Hallo

    Das Prinzip findest du hier erklärt. Du kommst nicht drumherum, jedes Element des Structs manuell zu behandel, aber das läßt sich gut mit den Operatoren kapseln.

    Das Lesen und Schreiben der AnsiStrings geht übrigens auch wesentlich einfacher, indem du den Hinweis beachtest, den Include auf iostream vor den Incude auf die vcl.h zu setzen.

    bis bald
    akari


Log in to reply