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

时间:2017-04-07 17:34:55

标签: arduino esp8266 spiffs

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

原始档案:
第1行:aaa
第2行:bbb
第3行:ccc
第4行:ddd
第5行:eee

我第一次运行该功能后:

第一个周期:
第1行:bbb
第2行:ccc
第3行:ddd
第4行:eee
第5行:fff

第二个周期后:
第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 个答案:

答案 0 :(得分:0)

好吧,让事情奏效了。问题是我没有添加" \ n"当我打印到文件中。所以我只是将一长串数据打印到文件中,我跳过了该功能。修复了代码,使它现在可以正常工作。