2017-04-07 94 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」。這樣,我只是將一長串數據打印到跳過該函數的文件中。修復了代碼,使其現在可以工作。