• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь файловая система SPIFFS

Belerafon

New member
Помогите разобраться как дописать данные в файл, не в конец.
Код:
File = SPIFFS.open("/data.json", "a"); // открывает файл и пишет в конец
File.seek(3, SeekEnd));  // должен сместить ввод на 3 символа назад - не работает
И другие параметры seek не работают.
SeekEnd возвращает false
другие параметры возвращают true, но не устанавливают в нужное место.
структура data.json примерно такая:
Код:
[
{"9:00": "67.5"},
{"9:30": "60.2"},
{"10:00": "63.8"}
]
суть проблемы в том что не могу дописать новый массив данных правильно, нужно переступить через символ ] и записать данные. Или удалить символ ] и записать его в конце по новой, но не знаю как это сделать. Пишу данные так File.print(time);
 

Alexey N

Member
А не проще вести запись просто в текстовый файл? А JSON формировать только при выводе по запросу?
 

Belerafon

New member
А не проще вести запись просто в текстовый файл? А JSON формировать только при выводе по запросу?
кстати да, может и проще так, но интересно все таки по работе с файлами почему не получается установить ввод в нужное место.
 

CodeNameHawk

Moderator
Команда форума
File = SPIFFS.open("/data.json", "a"); // открывает файл и пишет в конец
Так вроде File зарезервировано.
Посмотрите примеры. File System · ESP8266 Arduino Core
Вроде вначале должно быть
SPIFFS.begin()
 

nikolz

Well-known member
кстати да, может и проще так, но интересно все таки по работе с файлами почему не получается установить ввод в нужное место.
Вероятно потому, что это файловая система во флеш.
Она не позволяет писать файлы в виде кусков.
В ней нет каталогов.
В результате этого дозапись в конец возможна лишь при условии, что там свободно.
фактически эта файловая система не позволяет дозаписывать файлы, если их закрыли.
Файлы фактически пишутся заново.
 
Последнее редактирование:

Belerafon

New member
Вероятно потому, что это файловая система во флеш.
Она не позволяет писать файлы в виде кусков.
В ней нет каталогов.
В результате этого дозапись в конец возможна лишь при условии, что там свободно.
фактически эта файловая система не позволяет дозаписывать файлы, если их закрыли.
Файлы фактически пишутся заново.
дописываются в данные файлы хорошо, всегда пишу и закрываю файл. Но вот на перемещение места куда записать не реагирует
 

Belerafon

New member
Причем тут FLASH! Минус поставьте!
не работает. другие seek тоже не срабатывают, хотя возвращают истину. может писать надо по другому в файл или открывать его по другому. Но если открываю не с 'a' то файл перезаписывается полностью.
 

nikolz

Well-known member
дописываются в данные файлы хорошо, всегда пишу и закрываю файл. Но вот на перемещение места куда записать не реагирует
Повторю еще раз.
Это не обычная файловая система.
Она предназначена для малого размера и именно заточена на работу с флеш. Экономит число записей.
Дозапись возможно лишь в открытый файл или на новое место если дозапись в существующий но закрытый ранее.
 

nikolz

Well-known member
Можно попробовать сделать так.
Записать большой пустой файл, а потом дописывать в него.
 

Сергей_Ф

Moderator
Команда форума
@Belerafon а через буферный файл писать не вариант? Читаете исходный и пишите в буфер, до символа ]. Затем пишите что надо и закрываете скобку. Старый файл удаляете, буфер переименовываете.
 

Belerafon

New member
@Belerafon а через буферный файл писать не вариант? Читаете исходный и пишите в буфер, до символа ]. Затем пишите что надо и закрываете скобку. Старый файл удаляете, буфер переименовываете.
лог стал сохранять простой, а у же как будет запрос json так и стал формировать ответ, оказалось проще, как и подсказал товарищ Alexey N спасибо ему за подсказку.
 
Сверху Снизу