INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
LittleFS Open, seekSet und Write / Read tut nicht, was es soll
23.11.2020, 13:59
Beitrag #1
LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Hallo,

ich habe früher schon mit SPIFFs hantiert und in Dateien geschrieben. Habe dort nicht festgestellt, dass es nicht funktionieren würde. Jetzt nutze ich LittleFS und staune, dass ich Probleme habe.

Datei schreiben mit Mode "w" funktioniert. Mode "w+" funktioniert auch. Datei lesen Mode "r" funktioniert auch. Folgendes funktioniert aber irgendwie nicht:

Datei öffnen Mode "r+"
Datei schreiben
Datei schließen

Datei öffnen Mode "r"
Datei lesen
Datei schließen

Wenn ich die Datei beschreiben will, öffne ich die mit "r+" und positioniere den Zeiger mit seekSet (vom Anfang der Datei), um dann mit write() zu schreiben.
Beim Lesen mache ich dasselbe nur mit "r" und read().

Beim Lesen bekomme ich nicht die Daten zurück, die ich geschrieben habe.

Zur Kontrolle habe ich den Zeiger in der Datei ausgelesen:
Vor dem Schreiben an Position 64 bspw. Dann 30 Bytes schreiben, Position ist nun: 94. - Ist richtig.
Vor dem Lesen an Position 64. Dann 32 Bytes lesen, Position ist nun: 96. - Ist richtig.
Aber die Daten sind nicht dieselben.

Ich habe das mit "Serial.print" ausgegeben, hier das Ergebnis:

Code:
seekOffset: 64
1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6
Position: 94

seekOffset: 64
0000000000000000000000000000000000000000000000000000000000000000 Position: 96

Beim Schreiben sind die Bytes durch Komma getrennt und mittels Serial.print(x,HEX) ausgegeben. Beim Lesen habe ich die Bytes ohne Komma
ausgegeben, als High-Nibble und Low-Nibble in richtiger Reihenfolge (so steht also "00" für 0x00h), so dass zwei Zeichen für ein Byte stehen. Das ist hier aber zum Vergleichen egal. Man sieht auch so, dass es nicht stimmt. Weil beim Lesen bekomme ich nur Nullen zurück (die ich bein Anlegen der Datei mal rein geschrieben habe). Die Write scheint richtig in der Funktion, der Zeiger in der Datei wird ja hochgezählt. Beim Lesen scheint Read auch zu lesen, auch hier wird der Zeiger in der Datei hochgezählt. Bloß was ist mit den Daten? Ich kapiere das nicht.

Hatte jemand so etwas schon mal und kann sein Problem beschreiben? Oder vielleicht weiß es auch jemand, wie es zu solch merwüdigem Ergebnis kommen kann?

Ich suche mal weiter, weiß aber nicht, wie und wo. Als Anhaltspunkt könnte ich noch mitgeben, dass ich beim Schreiben auf SD-Karte auch schon ein ähnliches Problem mit LittleFS hatte. Da habe ich so lang rumgespielt, bis es irgendwie funktionierte und habe dann die Datei vorm Schreiben mit "a" geöffnet. Jetzt will ich in den Flash eines nodeMCU 1.0 schreiben und das funktioniert mit "a" nicht nicht, mit "r+" scheints aber auch nicht.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 14:12
Beitrag #2
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Ich kann noch eine Vermutung aufstellen: "w+" wird von LittleFS wie "w" behandelt, "r+" wie "r".

"a+" benutze ich zum Schreiben, um Daten anzuhängen. Das funktioniert.

Bloß, ich brauche einen Modus, wo ich den Dateizeiger positionieren und dann lesen und schreiben kann.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 14:23
Beitrag #3
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Hast Du mal versucht in a+ mit seek zu arbeiten?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 14:51 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2020 14:57 von Nichtraucher.)
Beitrag #4
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Ich hatte alle Modi durchprobiert. "a+" macht das, was es tun soll. Ab dem Ende der Datei. Die Position des Zeigers mittels seek() wird ignoriert.

Variante "a+" (Schreiben, dann Lesen, jeweils ab Position 64 in der Datei)
Code:
seekOffset: 64

1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6, Position: 1048606

seekOffset: 64

0000000000000000000000000000000000000000000000000000000000000000 Position: 96

Ich habe zur Probe die Daten von der Position ausgelesen, die das Ende der Datei darstellte:

Code:
seekOffset: 1048576
0102000001010202003201020300000102040001010201000012060000060000 Position: 1048608

Bloß hängt "a+" eben nur am Dateiende an.

Es scheint, als ob Modi, wo man in die Datei zwischen rein schreiben will (überschreiben) generell nicht funktionieren, mit LittleFS.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 15:09
Beitrag #5
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Hier scheint es aber zu funktionieren.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 16:13
Beitrag #6
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Danke für den Link!

Dort hatte jemand dasselbe Problem. Mit SPIFFs funktioniert es, mit LittleFS nicht. Irgendwas stimmt mit der seek-Funktion nicht? Na jedenfalls stürzen sich alle auf das EOF bei Seek und dann haben die das Thema geschlossen. Bloß, meine Datei ist 1MB groß, da komme ich mit 30 bytes nicht übers Filende raus, wenn ich bei Position 64 in der Datei starte.

Ich war gerade dabei, das weiter zu untersuchen, aber mein Programm macht Mucken. Das muss ich erst beseitigen, damit ich weiter probieren kann.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 16:24
Beitrag #7
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Ich habe die Datei auf 20kb verkleinert, zum Probieren.

"a" verhält sich wie "a+", wie man an der letzten Position sieht. Die Datei wird imme rgrößer, weil die Daten angehängt werden.
Code:
seekOffset: 64
1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6, Position: 20542
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2020 16:43 von Nichtraucher.)
Beitrag #8
RE: LittleFS Open, seekSet und Write / Read tut nicht, was es soll
Bei "r+" stimmt es jetzt, wo die Datei kleiner ist:

Code:
seekOffset: 64
1,2,0,0,1,1,2,2,0,32,1,2,3,0,0,1,2,4,0,1,1,2,1,0,0,12,6,0,0,6, Position: 94

seekOffset: 64
0102000001010202003201020300000102040001010201000012060000060000 Position: 96

Dann scheint das an der Dateigröße zu liegen. Bei der 1MB-Datei habe ich bemerkt, dass das Schreiben in die Datei sehr lange dauert, gerade so, als wenn sie neu geschrieben würde. Ich vermute, dass die Datei, bei Überschreiben innerhalb der Datei, kopiert wird. Wenn die Datei zu groß ist, scheitert das scheinbar. Dann sind die geschriebenen Daten weg. Jetzt weiß ich nur nicht, was die maximal mögliche Dateigröße hier ist (auf der SD-Karte scheinen auch 2MB-Dateien zu funktionieren, allerdings ist das dann SD.h, nicht LittleFS).

..................

Sooo, ich glaube, das war es erst einmal.
Ich habe die Datei zunächst mit 100kb Größe erstellt. Die Daten scheinen jetzt richtig drin zu stehen. Aber das Schreiben dauert ewig lange (vielleicht 6s für 32 Bytes). Aber zum Ausprobieren reicht. Später verwende ich dafür eine SD-Karte.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem Upload einer html Datei per littleFS mat-sche 8 282 Gestern 14:12
Letzter Beitrag: mat-sche
  formatierung von csv dateien in LittleFS gk_1 6 323 04.04.2021 17:56
Letzter Beitrag: Tommy56
  Reset nicht gleich Reset? Mirkan 33 3.913 06.03.2021 15:05
Letzter Beitrag: Mirkan
  D1 Mini - WLAN bei Frost nicht möglich? KlaRa 45 3.114 10.02.2021 11:24
Letzter Beitrag: hotsystems
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 21 2.463 02.02.2021 17:54
Letzter Beitrag: Tommy56
  OTA & spiffs (LittleFS) rev.antun 7 808 31.01.2021 20:07
Letzter Beitrag: rev.antun
  Sketch upload funktioniert plötzlich nicht mehr basementmedia 2 584 02.01.2021 17:31
Letzter Beitrag: Jan Hirt
  ESP32 Devkit c4 Oled und RFID RC522 betreiben klappt nicht steffus 1 591 23.12.2020 12:45
Letzter Beitrag: hotsystems
  ESP32: Binärdaten mit LittleFS speichern / Zerobytes in Strings ultralex 14 1.264 15.12.2020 14:00
Letzter Beitrag: Tommy56
  ESP8266-01 verbindet sich nicht mit dem WLAN Kopernikus 1 615 02.12.2020 20:02
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste