파일의 첫 번째 줄만 다른 임시 파일로 복사하는 데 문제가 있습니다. 그런 다음 원본 파일을 삭제하고 임시 파일의 이름을 원래 파일로 바꿉니다. 매주기마다 원본 파일에 일련의 데이터를 추가합니다. 코드가 처음 실행될 때 정상적으로 작동하고 내용이 사라지고 원본 파일에 한 줄만 표시됩니다.ESP8266 SPIFFS 파일의 내용을 복사하고 삭제하고 이름을 바꿉니다
원본 파일 :
라인 1 : AAA
라인 2 : BBB
라인 3 : CCC
라인 4 : ddd를
라인 5 : EEE
나는이 기능을 실행 한 후 처음 :
첫 번째주기 :
라인 1 : BBB
라인 2 : CCC
라인 3 : ddd를
라인 4 : EEE
라인 5 :
라인 1 :
초 사이클 이후 FFF, GGG
업데이트 :
파일 이름을 변경하고 spiffs로 열 때 esp가 파일의 내용을 보지 못해서 wri가되는 것처럼 보입니다. 함수가 끝난 후에 추가되는 줄을 검사합니다.
갱신 2 :
내가 파일에 라인을 추가 내 기능을 주석하더라도, deleteFirstLine 기능이 작동하지 않습니다. 나는 그것에 5 개의 선을 가진 파일에 기능을 사용하는 시도했다.
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);
}
}
}
데이터를 잃어 버리는 것을 막기 위해 추가 모드에서 'open()'을 사용합니다. – dandavis
원래 파일을 추가 모드로 열어야한다는 의미입니까? – zidrrr