Datei überschreiben .seek()

Hallo,

ich versuche gerade eine Datei zu überschreiben, aber leider ohne Erfolg. Der Sketch sieht folgendermaßen aus.

#include <SPI.h> // Einbinden der SD Bibliothek
#include <SD.h> // Einbinden der SD Bibliothek
#include <Wire.h> // Einbinden der SPI Bibliothek
#include "RTClib.h" // Einbinden der Adafruit DS1307 RTC Bibliothek
const String LogFileName = "/test.csv";
const int chipSelect = 10; // Für Datenlogger Modul am Arduino Uno so lassen
File LogFilePtr;

void setup()


{
Serial.begin(9600); // Öffne serielle Schnittsatelle
while (!Serial) { // Warte auf seriellen Port
}
Serial.print("\nInitalisierung SD Karte ");
if (!SD.begin(chipSelect))//wenn die Initialisierung NICHT ! erfolgreich war
{
Serial.println("ist fehlgeschlagen!");
while (1); // ab hier geht das Programm bei fehlerhafter initialisierung nicht weiter
}

delay(5000);



//if (!(SD.exists(LogFileName)))
//  {
//  }

  LogFilePtr = SD.open(LogFileName,FILE_WRITE); // Datei zum Schreiben öffnen. Es kann jeweils nur 1 Datei gleichzeitig geschrieben werden !
  if (LogFilePtr) // Wenn Datei zum schreiben bereit ist, schreibe Kopfzeile (Header) hinein
    {
    LogFilePtr.println(F("1;5;80;8;0;15;0;22;0;0;1;5;50"));
    Serial.println(F("Erster Wert schreiben"));
    LogFilePtr.close(); // Datei schließen
    }
   
}

void loop(void){
 

LogFilePtr = SD.open(LogFileName,FILE_WRITE);
if (LogFilePtr) // Wenn Datei zum schtreiben bereit ist, schreibe hinein
  {
  LogFilePtr.seek(0);  
  LogFilePtr.println(F("2;5;80;8;0;15;0;22;0;0;1;5;50"));
  Serial.println(F("Zweiter Wert schreiben"));
  LogFilePtr.close(); // Datei schließen

  
  }

  
delay(20000);
}

Beim zweiten mal schreiben versuche ich mit
LogFilePtr.seek(0);
Die Datei wieder ab der ersten Stelle zu beschreiben, aber es funktioniert nicht.
Kann mir jemand sagen wieso? Vielen Dank.

Gruß
ArduinoArti

Hallo ArduinoArti,
wenn Du die Datei komplett ersetzen möchtest, kannst Du das ja eventuell so machen

  SD.remove(LogFileName);
  LogFilePtr = SD.open(LogFileName,FILE_WRITE);

Die SD Library nutzt die SDfat Library und wenn ich es richtig gesehen habe, öffnet die SD Lib immer im APPEND Modus. Also grundsätzliches anhängen der Daten.
In der SDfat Library gibt es O_READ, O_WRITE, O_CREAT und O_APPEND.

Du kannst auch mal sowas versuchen

  LogFilePtr = SD.open(LogFileName,O_WRITE);

Dann sollte die Daten im reinen Schreibmodus ohne append geöffnet werden. Ob es dann aber funktioniert weiß ich nicht.
In der SD.cpp der SD Lib steht nämlich

// TODO: Allow for read&write? (Possibly not, as it requires seek.)

Also in Deinem Fall, wenn der Inhalt komplett ersetzt werden soll, am besten löschen und dann einfach mit open neu erstellen.

Gruß, Jürgen

Andere Variante: Anstelle von SD gleich die SdFat benutzen.

Gruß Tommy

Vielen Dank für die antworten. Ich werde die Datei dann jedes mal löschen und neu schreiben. Für mein aktuelles Projekt ist das eine ausreichende Lösung.