Forum: Compiler & IDEs 0x00 bei Dateiende


von Thomas (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von holger (Gast)


Lesenswert?

>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.

von Thomas (Gast)


Lesenswert?

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 ^^.

von holger (Gast)


Lesenswert?

>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.

von Thomas (Gast)


Lesenswert?

ah ok Danke werde ich aufnehmen, danke für den tip.

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
Noch kein Account? Hier anmelden.