problem mit struct in datei schreiben



  • Hallo!
    wenn ich aus einer existierenden datei eine struct laden will, steht nicht das richtige drinnen! aber wird die datei zur laufzeit des programmes geschreiben und dann gelesen, klappt es!? an was liegt das?

    struct Artikel
    {
        std::string name;
        int zeilen;
        int jahr;
    };
    
    struct Thema
    {
        int count; // anzahl der artikel zum thema
        std::vector<Artikel> artikel
    };
    
    void lesen(const std::string& file)
    {
        std::fstream f;
        Thema tmp;
        f.open( file.c_str() , std::ios::in | std::ios::binary );
        if ( f.is_open() )
        {
            f.read( (char*)&tmp, sizeof( tmp ) );
    
        }
        f.close();
        // ausgabe
        (...)
    }
    void schreiben( (...) )
    {
        std::fstream file;
        Thema thema;
        //thema füllen
        (...)
    
        file.open("test1.dat", std::ios::out|std::ios::binary);
        if (file.is_open())
    	file.write((const char*)&thema,sizeof(thema));
        file.close();
    }
    


  • SO geht das nicht.

    Dein Problem ist, das in beiden Structs jeweils Variable grössen herrschen.
    Sie bestehen nicht aus reinen atomaren Werten. Somit kannst
    du sie _nicht_ auf einen schwung binär in eine Datei schreiben .(!)

    wenn du einen String speichern willst, solltest du erst die größe des
    Strings speichern, dann den String schreiben. Beim Auslesen, zahl auslesen,
    und dann mit Read die anzahl der Bytes in den String schreiben.

    Bei Vector ist es fast das selbe, erst die Anzahl der Elemente im Vector
    in die Datei schreiben, und dann die einzelnen Elemente hinein schreiben,
    auslesen wieder -> Anzahl auslesen, mit schleife elemente auslesen.

    evtl. schaust du dir mal die Operatoren >>,<< an, damit kann man solche dinge
    elegant lösen.

    Devil





  • danke klappt bestens!


Anmelden zum Antworten