AVR Atmega Holger Klabundes SD-Karte Zeichen löschen?

OP #2804539
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
Persönliche Seite #2804569
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.
OP #2804592
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.