ESP8266 SPIFFS 复制文件内容,删除并重命名

问题描述 投票:0回答:1

我遇到一个问题,我将除第一行之外的所有内容从文件复制到另一个临时文件。然后我删除原始文件并将临时文件重命名为原始文件。在每个循环之后,我还会将一行数据附加到原始文件中。该代码第一次运行时工作正常,然后内容消失,原始文件中只有 1 行。

原文件:

line 1: aaa
line 2: bbb
line 3: ccc
line 4: ddd
line 5: eee

第一次运行该函数后:

第一周期:

line 1: bbb
line 2: ccc
line 3: ddd
line 4: eee
line 5: fff

第二个周期后:

line 1: ggg

更新:

看起来当我重命名文件并用 spiffs 打开它时,esp 看不到文件的内容,因此它只写入函数结束后添加的行。

更新2:

即使我注释掉向文件添加行的函数,

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);
      }
    } 
}
arduino esp8266 spiffs
1个回答
0
投票

好吧,一切顺利。问题是我没有添加“ “当我打印到文件中时。这样我就将一长行数据打印到文件中,我用该函数跳过了该文件。修复了代码,现在它可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.