ESP8266 SPIFFS копировать содержимое файла, удалять и переименовывать
У меня проблема, когда я копирую все, кроме первой строки из файла в другой временный файл. Затем я удаляю исходный файл и переименовываю временный в исходный. После каждого цикла я также добавляю строку данных в исходный файл. Код работает нормально при первом запуске, затем содержимое исчезает, и в исходном файле находится только 1 строка.
Исходный файл:
строка 1: ааа
строка 2: bbb
строка 3: ccc
строка 4: ддд
строка 5: ее
После первого запуска функции:
Первый цикл:
строка 1: bbb
строка 2: ccc
строка 3: ддд
строка 4: ее
строка 5: ффф
После второго цикла:
строка 1: ggg
Обновить:
Похоже, что когда я переименовываю файл и открываю его с помощью spiffs, esp не видит содержимое файла, поэтому он просто записывает строку, которая добавляется после завершения функции.
Update2:
Даже если я закомментирую свою функцию, которая добавляет строки в файл, функция deleteFirstLine не работает. Я попытался использовать функцию для файла с 5 строками. Тот же результат, первый цикл в порядке, а второй ничего нет в файле...
Код, который я использую в Arduino:
void deleteFirstLine(String filename){
File original = SPIFFS.open(filename, "r");
String name_ = original.name();
Serial.println(name_);
if (!original) {
Serial.print("- failed to open file "); Serial.println(filename);
}else{
Serial.print("- DELETING FROM FILE "); Serial.println(filename);
//We skip the first line
original.readStringUntil('\n');
File temporary = SPIFFS.open(TEMP_PATH, "w+");
if(!temporary){
Serial.println("-- failed to open temporary file ");
}else{
while(original.available()){
temporary.print(original.readStringUntil('\n')+"\n");
}
temporary.close();
}
original.close();
if(DEBUG == 1){
if(SPIFFS.remove(filename)){
Serial.println("Old file succesfully deleted");
}else{
Serial.println("Couldn't delete file");
}
if(SPIFFS.rename(TEMP_PATH,filename)){
Serial.println("Succesfully renamed");
}else{
Serial.println("Couldn't rename file");
}
}else{
SPIFFS.remove(filename);
SPIFFS.rename(TEMP_PATH,filename);
}
}
}
1 ответ
Хорошо, получил вещь работает. Проблема заключалась в том, что я не добавил "\n" при печати в файл. таким образом, я просто напечатал длинную строку данных в файл, который пропускаю с помощью функции. Исправлен код, теперь он работает.