2017-04-07 456 views
0

我有一个问题,我复制一切,但第一行从文件到另一个临时文件。然后我删除原始文件并将临时文件重命名为原始文件。在每个循环之后,我还将一行数据附加到原始文件中。代码运行良好,然后内容消失,原始文件中只有1行。ESP8266 SPIFFS复制文件内容,删除和重命名

原始文件:
第1行:AAA
线2:BBB
线3:CCC
线4:DDD
线5:EEE

后我运行的功能第一次:

第一次循环:
行1:BBB
第2行:CCC
线3:DDD
线4:EEE
线5:FFF

后第二次循环:
第1行:GGG

更新:
看起来像这样当我重命名文件并用spiffs打开它,esp没有看到文件的内容,所以它只是wri测试函数结束后添加的行。

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

'open()'它在追加模式下防止丢失数据追加 – dandavis

+0

您是说我应该在追加模式下打开原始文件? – zidrrr

回答

0

好的,得到的东西的工作。问题是当我打印到文件中时,我没有添加“\ n”。这样,我只是将一长串数据打印到跳过该函数的文件中。修复了代码,使其现在可以工作。

相关问题