mikrocontroller.net

Forum: Compiler & IDEs 0x00 bei Dateiende


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
 unsigned char result;
 static unsigned char buffer[] = "Test.txt\ninhalt mal dieses\n";
 
 puts("Writing Test.txt\n");
  
 result=Fopen("Test.txt",'a');
  
 if(result==F_OK)
 {
    Fwrite(buffer,(sizeof(buffer)-1));
    Fclose();
 }
 printf("Status = %d \n",result);
 Fclose();
 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 ^^.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ok Danke werde ich aufnehmen, danke für den tip.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.