Forum: Mikrocontroller und Digitale Elektronik AVR Atmega Holger Klabundes SD-Karte Zeichen löschen?


von Anton G. (antong)


Lesenswert?

Hallo,
ich nutze von Holger Klabunde den Code um eine SD Karte am µC zu 
beschreiben.

Klappt auch alles super. Vielen Dank von hier aus an Holger Klabunde. 
Tolle Arbeit.

Jetzt habe ich aber noch eine Frage. Gibt es eine Möglichkeit ein 
einzelnes Zeichen bzw. mehrere Zeichen (z.B. eine ganze Zeile) wieder 
aus der Datei auf der SD Karte zu löschen?

Mit dem Befehl "Fwrite("Hallo\n",6);" kann ich 6 Bytes, also das Hallo 
und den Zeilenumbruch, in die Datei schreiben.
Wenn meine Datei nun wächst, möchte ich den ältesten Eintrag wieder 
löschen (wie ein Ringbuffer).
Mir fällt aber keine Möglichkeit ein, wie ich die Bytes löschen könnte.

Ich kann ja erst einmal mit "Fseek(0, SEEK_SET);" zum Anfang der Datei 
spulen und dann???
Gibt es sowas wie "Fwrite("\del",6);"? Wahrscheinlich nicht. Hat jemand 
eine Idee?

Gruß Antong

von Tom M. (tomm) Benutzerseite


Lesenswert?

Wahrscheinlich ist das so nicht möglich. Eine Datei ist einfach nur ein 
Zeichenstrom, die Interpretation, was eine "Zeile" ist, liegt bei dir, 
beim Programmierer.

Du wirst selbst Funktionen für eine "Ringpufferdatei" implementieren 
müssen. Idealerweise arbeitest du mit einer fixen record size und sparst 
dir so das langwierige Umkopieren von Daten (also lesen, puffern, 
verschieben, wieder zurückschreiben).

Anton G. schrieb:
> Mit dem Befehl "Fwrite("Hallo\n",6);" kann ich 6 Bytes, also das Hallo
> und den Zeilenumbruch, in die Datei schreiben.

Hier wird klar, dass fwrite() kein "Zeilenkonzept" kennt, sondern 
einfach ein char array auf den Datenträger schreibt. Du selbst hast eine 
übliche Konvention verwendet, nämlich dass eine Zeile aus 0..n chars 
besteht, die mit \n abgeschlossen wird.

von Anton G. (antong)


Lesenswert?

Hallo Tom,
das eine Zeile meine Interpretation ist, ist mir klar. Wenn ich wüsste 
wie ich überhaupt ein Zeichen (also ein Byte) löschen könnte, dann 
könnte ich mir was basteln damit z.B. immer die ersten 100Bytes gelöscht 
werden.
Ich glaube das wird dann nicht das Problem.

Das Problem was ich habe, ich habe keine Ahnung wie ich da komplett ein 
Byte rauslösche ohne den Rest wie du ja auch schreibst in der Datei nach 
"links" zu rücken, durch lesen, puffern,schreiben...
Danke.

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.