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" при печати в файл. таким образом, я просто напечатал длинную строку данных в файл, который пропускаю с помощью функции. Исправлен код, теперь он работает.

Другие вопросы по тегам