ファイルの最初の行以外のすべてを、別の一時ファイルにコピーするのに問題があります。次に、元のファイルを削除し、一時ファイルの名前を元の名前に変更します。毎回のサイクルの後、元のファイルに一連のデータを追加します。コードは初めて実行されたときに正常に動作し、コンテンツが消えて元のファイルに1行しか残っていません。ESP8266 SPIFFSファイルの内容をコピーして、削除して名前を変更します
オリジナルファイル:
行1:AAA
ライン2:BBB
ライン3:CCC
ライン4:dddを
行5:EEE
私は関数の実行後初回:
第1サイクル:
行1:BBB
ライン2:CCC
行3:dddを
ライン4:EEE
ライン5:
行1:
第二サイクルの後FFF GGG
更新:
ファイルの名前を変更してスパムで開くと、espにはファイルの内容が表示されないため、関数が終了した後に追加される行を調べます。
アップデート2:
私は、ファイルに行を追加して、私の機能をコメントアウトしても、deleteFirstLine機能が動作しません。私はそれに5行のファイル上の関数を使用してみました。同じ結果、最初のサイクルは、2番目の1は何もファイルで大丈夫ですされていない...私は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);
}
}
}
データを失うのを防ぐために、追加モードでそれを開く() ' – dandavis
私は追加モードで元のファイルを開くべきですか? – zidrrr