2017-04-07 6 views
0

ファイルの最初の行以外のすべてを、別の一時ファイルにコピーするのに問題があります。次に、元のファイルを削除し、一時ファイルの名前を元の名前に変更します。毎回のサイクルの後、元のファイルに一連のデータを追加します。コードは初めて実行されたときに正常に動作し、コンテンツが消えて元のファイルに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); 
     } 
    } 
} 
+1

データを失うのを防ぐために、追加モードでそれを開く() ' – dandavis

+0

私は追加モードで元のファイルを開くべきですか? – zidrrr

答えて

0

よしは、事の作業を得ました。問題は、ファイルに印刷するときに "\ n"を追加しなかったことです。そのようにして、私は関数にスキップしたファイルに長い行のデータを出力しました。今すぐ動作するようにコードを修正しました。

関連する問題