daten schreiben - falsche daten einlesen?

  • moin...
    so vorweg ich kompiliere das mit gcc, ist also c nicht c++ bevor nun einer meckert funktionen wie printf sollte man in verwendet da sie veraltet wären...

    so mein problem -> ich schreibe 4 zahlen/bytes/chars/... mittels fputc() in eine datei und möchte sie dann in einem anderem programm wieder auslesen mittels fgetc()... das problem dabei ist nun aber, dass er anscheinend andere daten ausließt, als er schreibt... ich kann mir absolut nicht erklären wieso. :(

    so geschrieben wirds da ->

    Zitat

    /* DEBUGE */
    #ifdef DEBUGE
    printf("Schreibe Dateilaenge an Position: %d\n", (int)ftell(archiv_file));
    #endif


    /* Dateilänge schreiben */
    fputi(data_length, data_file);


    und meine recht provesorische fputi funktion dazu ->

    So die Ausgabe sieht dann in etwa so aus:

    Zitat

    Schreibe Dateilaenge an Position: 37
    Schreibe <9688>: 216 - 37 - 0 - 0


    Bevor er die 4 Zahlen/Bytes/Chars/... also geschrieben hat war der Dateizeiger bei 37...

    so nun die "auslesung":

    Zitat

    /* Dateilaenge auslesen */
    /* DEBUGE */
    #ifdef DEBUGE
    printf("Lese Dateilaenge an Position: %d\n", (int)ftell(archiv_file));
    #endif

    data_length = fgeti(archiv_file);


    und meine fgeti funktion dazu ->


    die ausgabe dazu:

    Zitat

    Lese Dateilaenge an Position: 37
    Lese <1179403647>: 127 - 69 - 76 - 70


    also auch hier ist der dateizeiger >vor< dem lesen auf 37 / beim 37. byte... danach ließt er 4 bytes / zahlen / chars / ... aus... und nun sieht man ja auch was mein problem ist, die 4 bytes sind andere als geschrieben wurden :)

    wieso?

  • Kannst du vielleicht mal die Datei Senden in die geschreiben wurde?
    Also ich möchte sehen wie es genau eingetragen wurde.
    Ich weiß jetzt selber nicht wie er auf diese Zahlen kommt.
    Eigentlich kann ich auch kein C (noch! xD) aber ich denke man sollte schon erkennen woran es liegt.

    Also ich denke Der Fehler kommt von "fgeti" da er die Werte ausgibt.
    Nur weiß ich nicht ob das jetzt eine Func von dir ist oder sie zu C gehört xD (ich denke mal sie ist von dir)

  • jop, fgeti/fputi ist von mir weswegen ich ja auch den code gepostet habe.

    so gute idee, einfach mal die datei öffnen :relief:
    ok ich hab nun mal den binären modi rausgenommen (sonst kann man es ja leider in gedit nicht mehr öffnen) und merke grade -> huh der schreibt das ganze ja gar nicht rein kein wunder also damit es nicht klappt. :)

    so dann stellt sich nun das neue problem wieso schreibt er es nicht ?

    fputi wird aufgerufen, der stream sollte gültig sein (!= NULL) und die richtigen daten bekommt die funktion auch, was man ja an der ausgabe erkennen kann.
    und direkt nach der ausgabe kommt dann ja das ->

    Zitat

    fputc((char)bytes[0], file);
    fputc((char)bytes[1], file);
    fputc((char)bytes[2], file);
    fputc((char)bytes[3], file);

    so ok... die funktion fputc liefert -1 zurück, was laut diversen seiten ja für einen fehler steht. (wenn kein fehler auftritt, sollte die funktion den buchstaben zurückgeben, der geschrieben wurde, steht zumindest auf diversen seiten :))

    dann nun eben nochmal das neue problem -> wieso gibts den fehler bzw was bedeutet er ?

    -------

    args ok...
    fehler gefunden -> kein wunder haut das nicht hin ich hab ja auch den völlig falschen stream angegeben... :(

    danke für die hilfe... :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!