speichern laden



  • ich speichere ein array von einer struktur binär mit
    fwrite und lese die wieder mit fread ein

    also:

    struct Daten{
     //daten...
    };
    
    struct Daten*Data=(Daten*)malloc(sizeof(Daten));
    
    int main(){
      // Data wird mal mit realloc vergrößert und
      // es wird etwas reingeschrieben...
    
       write(Data,sizeof(Daten),iIndex,File);
    }
    

    das problem ist wie kann ich beim lesen
    herausfinden wie viele sätze sich darin befinden?



  • Hi

    Ich versteh die Frage nicht ganz. Meinst du Sätze in der Datei oder im Array ?
    Du erstellst übrigens kein Array von struct Daten mit deiner allozierung.

    Sondern erstellst die struktur daten dynamisch.

    Wenn du Sätze in der Datei meinst.: Ist das überhaupt wichtig ?
    Du kannst einfach alle Einlesen bis eof und meinetwegen mitzählen.



  • ja ich mein die vom file

    hab ich mir auch schon gedacht, aber mit was soll
    ich das machen??



  • Hi

    na einfah mitzählen

    //----snip------
    int i=0;
    int bytes=0;
    while(1)
    {
      bytes+=fread(Data[i],sizeof(Daten),1,datei);
      if(feof(datei))
         break;
    }
    
    //jetz i i die Anzahl
    //da du aber vorher nicht weist wieviele Datensätze es sind müsstest du realloc
    //benutzen oder aber jedesmal die Anzahl der Datensätze als erstes in die Datei
    //schreiben, dann kannst du sie auslesen und entsprechend speicher allozieren
    //mit malloc
    //----snap------
    
    Ich hoffe das ist was du meinst
    


  • 1. Dateigroesse ermitteln
    2. Buffer in dieser Groesse allozieren
    3. File in diesen Buffer einlesen
    4. Anzahl Eintraege=Filegroesse / Groesse deines Typs

    Ich darf aber damit rechnen, dass du keine Pointer im struct
    hast... oder?



  • @Solaris'dUKe@work

    natürlich hab ich keine pointer in der struktur

    aber danke für deine hilfe jetzt funkts 😉


Anmelden zum Antworten