ESP8266 bestimmte Zeile aus Textdokument im SPIFFS beschreiben

Hallo Zusammen,
ich erstelle mir im Filesystem des ESP8266 eine Textdatei ("ap.txt").
Beispielhaft beschreibe ich zwei Zeilen dieser Datei und lese sie später nach entsprechender
Aufforderung im Seriellen Monitor wieder aus.

Dabei kann ich z.B. über eine Zählerschleife gezielt eine bestimmte Zeile abfragen.
Nebenfrage: Kann ich ermitteln, aus wie vielen BESCHRIEBENEN ZEILEN mein Textdokument besteht?

Hauptfrage: Wie kann ich eine BESTIMMTE Zeile BESCHREIBEN. Mein Ziel wäre eine Funktion, welche ungefähr so aussieht:

void write_in_TXT(Int Zeile, String Inhalt) {
  //Der Inhalt ("Inhalt") wird in Zeile ("Zeile") geschrieben.
}

mein bisheriger Code:

#include "FS.h"

void setup() {
  Serial.begin(9600);
  SPIFFS.begin();

  setAP("SSID","Passwort"); 

}

void setAP(String param1, String param2) {
  
  File f = SPIFFS.open("/ap.txt", "w");
  if (!f) {Serial.println("Kritischer Fehler. ap.txt konnten nicht gelesen werden");}
  f.println(param1);
  f.println(param2);
  f.close();
  
}

void loop() {
        
  if (Serial.readString() == "Get_Info") { 

    File f = SPIFFS.open("/ap.txt", "r");
    Serial.println(f.readStringUntil('\n'));
    Serial.println(f.readStringUntil('\n'));
    f.close();
  
  }

  if (Serial.readString() == "Write_Line_5") {

    File f = SPIFFS.open("/ap.txt", "r");
    //?????????????????????????
    f.close();
  
  }  

}

Wie wäre es mit einer festen Zeilenlänge, also einer festen Datensatzlänge.
Damit ist die Adressierung ein Kinderspiel.
Auch die Berechnung "Anzahl Zeilen" ist dann trivial.

okay, angenommen ich gebe jeder Zeile 50 Zeichen, wie müsste ich dann vorgehen?

Kann ich ermitteln, aus wie vielen BESCHRIEBENEN ZEILEN mein Textdokument besteht?

Filesize/50

Wie kann ich eine BESTIMMTE Zeile BESCHREIBEN.

Angenommen, die 20igste Zeile, dann:

seek(19*50), dann dein write()

Habe folgende probiert:

  File f = SPIFFS.open("/ap.txt", "w");
  if (!f) {Serial.println("Kritischer Fehler. ap.txt konnten nicht gelesen werden");}
  f.seek(5*50);
  f.println("Test");
  f.close();

und bekomme folgenden Fehler:
exit status 1
no matching function for call to 'fs::File::seek(int)'

Glaube der Meldung.
Bitte die Doku lesen.

f.seek(5,SeekSet);

Okay, tut mir leid, aber ich komme dennoch nicht weiter.
Ich habe bisher nur in der VB.Net Umgebung programmiert. C war bisher ein Fremdwort.
Kann mir jemand noch behilflich sein?

f.seek(5,SeekSet);

Meintest du nicht f.seek(5*50,SeekSet) ?

Ja schon klar, ich versuche erstmal nur überhaupt irgendwas zu schreiben.
Ich bekomme das Schreiben und spätere Einlesen so nicht hin

Du macht es einem auch nicht gerade leicht...
:grin: