Hallo, ich hätte mal ne Frage bezüglich Schreiben in eine Datein bzw. append ans Dateieinde. Ich verwende die Bibo von dem Herrn Klabunde und schreibe mit dem append Befehl bei Fopen in eine Datei, nach dem ersten schreiben ist alles in ordnung wenn ich die SD-Karte in den Rechner schiebe kann ich den Text mit dem Notepad normal lesen, bis auf zeilenwechselszeichen die natürlich anders sind. Nun das Problem, ich Schreibe ein erneutes mal in die Datei, wieder mal mit Fopen append, lege die SD-Karte in den Rechner und öffne das File mit dem Notepad. Notepad zeigt mir von hieraus nur noch die umbruchszeichen für den Zeilenwechsel an (Dies Viereck 0x0A bei Windows 0x0D+0x0A). Wenn ich das File nun in nem Hex-Editor öffne sehe ich den Text komplett so wie er sein sollte. Das Problem ist dabei wohl das in dem File wo vorher das Dateieinde war immer noch das 0x00 steht (EOF denke ich mal) und somit da Windows nichts mit anzufangen weiß (habe Zeichen auch schon überschrieben danach alles OK), allerdings ließt Fopen Read dann auch nur bis zu diesem Zeichen und übergeht dann auch den Rest. Meine Frage nun, hab ich vielleicht ne Option vergessen wo ich vorher das 0x00 löschen kann oder muss ich das vorher anders entfernen ? Mfg Thomas
> Das Problem ist dabei wohl das in dem File wo vorher das Dateieinde war > immer noch das 0x00 steht Wenn da ein 0x00 steht, wirst du es wohl hineingeschrieben haben. > (EOF denke ich mal) Nein.
>Wenn da ein 0x00 steht, wirst du es wohl hineingeschrieben haben. Das denke ich auch. Prüf mal die Längenangabe deines letzten Textes beim ersten schreiben. Evtl. hast du da ein Byte zu viel angegeben. >> (EOF denke ich mal) Es wird kein EOF geschrieben. Wann EOF erreicht ist wird über die Dateilänge ermittelt. Da kommen wir auch gleich zu deinem nächsten Problem: >allerdings ließt Fopen Read dann auch nur bis zu diesem >Zeichen und übergeht dann auch den Rest. Da hast du wohl irgendwo ein Fclose() vergessen. Schieb doch mal den Programmcode mit deinen Schreib/Leseroutinen rüber.
Ah habs gefunden. hatte Fwrite(buffer,(sizeof(buffer))); gemacht da die daten aber in wirklichkeit -1 waren hat der einen wert zu viel reingeschrieben. Unten noch mal das abgeänderte wie es nun richtig läuft. Danke an alle die sich dann so schnell gemeldet haben.
1 | unsigned char result; |
2 | static unsigned char buffer[] = "Test.txt\ninhalt mal dieses\n"; |
3 | |
4 | puts("Writing Test.txt\n"); |
5 | |
6 | result=Fopen("Test.txt",'a'); |
7 | |
8 | if(result==F_OK) |
9 | {
|
10 | Fwrite(buffer,(sizeof(buffer)-1)); |
11 | Fclose(); |
12 | }
|
13 | printf("Status = %d \n",result); |
14 | Fclose(); |
15 | puts("Done \n"); |
> Da hast du wohl irgendwo ein Fclose() vergessen.
ne aber eins zu viel ^^ aber wenn ich den Quellcode richtig gelesen hab
haste das abgefangen ^^.
>sizeof(buffer)-1
Das könnte gefährlich werden wenn du den Text in buffer
mal änderst (kürzer machst). Für Text nimm lieber strlen(buffer).
Dann wär das Problem gar nicht erst aufgetreten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.