Mehrere Structs in/aus eine/r Binärdatei speichern bzw. laden



  • Hallo miteinander!
    Bin neu hier...
    ich studiere Informatik im 4. Semester und bin gerad mitten im C- Selbsstudium.

    Bei einer Aufgabestellung stehe ich vor einem kleinen Problem:

    Ich habe eine doppelt verkettete Liste ausprogrammiert. Ein Knoten ist in Form eines Structs realisiert.
    Nun soll ich nach befüllen einer Liste, alle Listenknoten (also structs) in eine Binärdatei speichern und beim Neustart des Programmes die Liste wieder laden.

    Ich habe es mittels

    //.../
    FILE *save=fopen("struct.dat","wb");
    fwrite(Name, sizeof(struct ListNode),1,save);
    fclose(save);
    //.../
    

    bzw.

    //.../
    FILE *load=fopen("struct.dat","rb);
    fread(Name,sizeof(struct ListNOde),1,load);
    //.../
    

    bereits geschaft ein einzelnes Struct zu speichern und zu laden.

    Ich möchte jetz aber mehrere Structs in eine Datei schreiben.
    Wie kann ich das anstellen, dass ich einfach ein neues Struct anhängen kann?

    Für eine paar infos wäre ich sehr dankbar!

    Freundliche Grüße
    guitargod.



  • wenn es sichergestellt ist, dass die größe der struktur konstant ist (also z.b. nur daten elementarer typen enthält) reicht ein einfaches traversieren der liste, wie du es auch machen würdest, wenn du einen knoten suchst. nur das du jetzt den inhalt der knoten nach und nach in die datei speicherst.



  • Ich will ja ni doof tun, aba wofür steht "Name"??

    Kannste dat ni einfach in nen array speichern und dann in no schleife die datei beschreiben??? und wido laden?



  • Hast du denn mal nach fopen gegoogelt? Hast du keine Dokumentation dazu? Ist auf den Ruecken schmeissen und schreiend strampeln einfacher als selbst etwas zu schaffen?



  • hork hork hork hork schrieb:

    Hast du denn mal nach fopen gegoogelt? Hast du keine Dokumentation dazu? Ist auf den Ruecken schmeissen und schreiend strampeln einfacher als selbst etwas zu schaffen?

    In der Doku zu fopen steht wie man eine selbstgeschriebene Liste serialisiert? Ich glaube nicht.



  • Da staende etwas von "a" fuer APPEND.

    Und Listen serialisieren... lernen die an dieser Uni etwa nichts? Durchlaufen von verketteten Listen muss doch behandelt worden sein! Durchlaufen und schreiben, das ist keine schwarze Kunst.



  • Ich merk das jetzt erst... einfach die structs binaer in die Datei schreiben gibt nur Chaos, denn die Zeiger in den Speicher werden bedeutungslos fuer eine Datei sein.

    Neues struct erstellen, wo keine Pointer drin sind. Dann die Liste iterieren, structs erzeugen, und stattdessen diese structs schreiben. Die Reihenfolge sollte klar sein: so wie geschrieben wurde.

    Wie man liest, das ist Hausaufgabe zu Montag.



  • hork hork hork hork schrieb:

    Ich merk das jetzt erst...

    Aber vorher groß die Klappe aufreissen, gell?

    edit: nicht böse gemeint, aber bei deinem selbstsicheren Auftreten... 😉



  • hork hork hork hork schrieb:

    Ich merk das jetzt erst... einfach die structs binaer in die Datei schreiben gibt nur Chaos...

    wir wissen hier doch gar nicht, wie die struktur aussieht.
    vielleicht postet das jimmy ja noch.

    ein praktikabler ansatz wäre der folgende aufbau:

    #define LEN 256
    struct MyStruct
    {
    	int inum;
    	double dnum;
    	char buf[LEN];
    	char* somebytes;
    	unsigned long somebytes_count;
    };
    struct List
    {
    	struct MyStruct* prev, *next;
    };
    

    wenn die strukturen immer gleich groß sind, ist das ja einfach. aber wenn eine struktur zeiger enthält, wie hier z.b. der zeiger somebytes, dann wird es schon etwas aufwendiger. aber sooo viele zeilen extra sind da auch nicht.



  • Tim schrieb:

    Aber vorher groß die Klappe aufreissen, gell?

    edit: nicht böse gemeint, aber bei deinem selbstsicheren Auftreten... 😉

    Das ist zur Haelfte Taktik und zur Haelfte meine Persoenlichkeit wenn ich mich mit etwas gut auskenne. Man stelle sich doch nur mal vor, wenn jeder aalglatt wie ein Staubsaugervertreter seine Statements mit koennte, sollte, muesste versichert. Zuhoerer riechen es, wenn du dir nicht sicher bist. Zuhoerer wollen, dass du sicher klingst. Maeh 😉


Log in to reply