2017-04-07 10 views
0

파일의 첫 번째 줄만 다른 임시 파일로 복사하는 데 문제가 있습니다. 그런 다음 원본 파일을 삭제하고 임시 파일의 이름을 원래 파일로 바꿉니다. 매주기마다 원본 파일에 일련의 데이터를 추가합니다. 코드가 처음 실행될 때 정상적으로 작동하고 내용이 사라지고 원본 파일에 한 줄만 표시됩니다.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); 
     } 
    } 
} 
+1

데이터를 잃어 버리는 것을 막기 위해 추가 모드에서 'open()'을 사용합니다. – dandavis

+0

원래 파일을 추가 모드로 열어야한다는 의미입니까? – zidrrr

답변

0

좋아, 물건의 작업을 가지고 : 같은 결과는 첫 번째 사이클 내가 아두 이노에 사용

코드 ... 다음 두 번째 아무것도 파일에없는, 괜찮습니다. 문제는 내가 파일에 인쇄 할 때 "\ n"을 추가하지 않았다는 것입니다. 그래서 나는 방금 함수로 건너 뛰는 파일에 긴 데이터 행을 인쇄했습니다. 코드가 수정되어 이제 작동합니다.