Struktur in file schreiben



  • Hallo,
    wieder eine Anfängerfrage. Was is in folgendem Progamm falsch, dass die Strukturdaten nicht richtig in der Datei geschrieben werden.

    Danke und Grüße
    Bahanfar

    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>

    typedef struct header_struct
    {
    int dataID;
    int info;

    struct datatype
    {
    int first:1;
    int type:4;
    int cript:1;
    }datatype1;

    }HEADER;

    FILE *dlt_file = NULL;
    char *filename;

    void writeInFile(FILE *file,HEADER data)
    {
    fwrite(&data,sizeof(HEADER),1 , dlt_file);
    }

    void readOutFile(FILE *file)
    {
    HEADER test;

    fread(&test, sizeof(HEADER), 1, file);
    }

    int main(void)
    {
    HEADER header;

    filename = "dlt_data.dat";

    if((dlt_file = fopen(filename, "r+b")) == NULL) {
    return 0;
    }
    header.dataID = 12;
    header.info = 110;
    header.datatype1.cript = 0;
    header.datatype1.first = 1;
    header.datatype1.type = 2;

    writeInFile(dlt_file,header);

    readOutFile(dlt_file);

    fclose(dlt_file);
    return 1;
    }



  • bahanfar schrieb:

    FILE *dlt_file = NULL;
    char *filename;

    void writeInFile(FILE *file,HEADER data)
    {
    fwrite(&data,sizeof(HEADER),1 , dlt_file);
    }

    Wenn du das Ziel-FILE schon als Parameter entgegennimmst, solltest du auch dort reinschreiben.

    Außerdem: Woran machst du fest, daß "die Strukturdaten nicht richtig in der Datei geschrieben werden"? fwrite() schreibt die Binärdaten genau so, wie sie bei dir im RAM stehen, in die Datei - da kommt idR nichts hinten raus, was ein Mensch entziffern könnte. (dafür ist das Ergebnis auch deutlich kompakter als wenn du alles in Textform schreiben würdest)



  • CStoll schrieb:

    bahanfar schrieb:

    FILE *dlt_file = NULL;
    char *filename;

    void writeInFile(FILE *file,HEADER data)
    {
    fwrite(&data,sizeof(HEADER),1 , dlt_file);
    }

    Wenn du das Ziel-FILE schon als Parameter entgegennimmst, solltest du auch dort reinschreiben.

    Außerdem: Woran machst du fest, daß "die Strukturdaten nicht richtig in der Datei geschrieben werden"? fwrite() schreibt die Binärdaten genau so, wie sie bei dir im RAM stehen, in die Datei - da kommt idR nichts hinten raus, was ein Mensch entziffern könnte. (dafür ist das Ergebnis auch deutlich kompakter als wenn du alles in Textform schreiben würdest)

    danke für die Antwort. file und dlt_file war eine Kopieverwechselung gewesen. Aber wie kann ich rausfinden ob die Daten richtig geschrieben wurden. Ich muss später aber auf diese Daten zugreifen und wider auf dem Bildschirm darstellen. Ist überhaupt die Schreib- und Lese-Vorgehensweise richtig?
    Danke
    Bahanfar



  • bahanfar schrieb:

    Aber wie kann ich rausfinden ob die Daten richtig geschrieben wurden.

    du kannst sie mit einem hexeditor prüfen. oder sie mit fread wieder einlesen und vergleichen.



  • bahanfar schrieb:

    Aber wie kann ich rausfinden ob die Daten richtig geschrieben wurden.

    per fread() einlesen und vergleichen.

    Ist überhaupt die Schreib- und Lese-Vorgehensweise richtig?

    Abgesehen davon, daß die Funktion "readOutFile()" den gelesenen Datensatz auch zurückgeben sollte, sieht es gut aus.

    (und vor dem Lesen solltest du den Dateizeiger mit rewind() oder fseek() zurückschieben auf den Dateianfang)


Anmelden zum Antworten