【问题标题】:SPIFFS change content from specific line in FileSPIFFS 更改文件中特定行的内容
【发布时间】:2021-05-15 11:01:26
【问题描述】:

我已经使用 ESP32 和 SPIFFS 有一段时间了。我的项目将涉及在用户需要时更改文件中特定行的内容。该文件将始终以相同的格式保存,因此我知道将更改哪一行。

我当前的文件是这样存储的:

Content inside file: 
DeviceNmae
test@test.com.br
123456
button to read
uid from databa
internet ssid
internet pass

当用户在应用程序中更改互联网 ssid 时,我的 esp32 将从数据库中读取内容并检测更改。它将存储传入的更改并更新行。

例如,我将数据更改为“int ssid now”,数据库将读取并将“internet ssid”更改为“int ssid now”。我只想从那一行更新内容,但我什么也没找到。如果我没有通过更新找到解决方案,我将不得不从文件中删除所有内容并创建一个新内容,只是为了更改该行。

我像这样附加数据:

void funcClass::append_data(String funcName, char Text[]) {

  file = SPIFFS.open("/esp_name.txt", FILE_APPEND);

  while (connection_state == 1 and funcName == ""){
    if (connection_state == 1 and funcName == "" and stop_loop == 0){
      for (int i = 0; i < strlen(Text); i++){
        char c = Text[i];
        SerialBT.write(c);
      }  
      SerialBT.write('\n');  
    }
    stop_loop = 1;
    if (SerialBT.available()){
      while (SerialBT.available()) {
        insert_chars = SerialBT.read();
        funcName = String(funcName + insert_chars);
      }
      stop_loop = 0;
    }  
  }

  if (file.print(funcName)){
    Serial.print("data was added: ");
    Serial.println(funcName);
  }else{
    Serial.println("data was not added");
    return;
  }

  file.close();
}
``

【问题讨论】:

  • 你为什么一直用 esp8266 标记你的 ESP32 问题?
  • 你不能这样做,数据存储在一系列内存地址中。您确实可以编辑内容,但如果新的内容长度不同,则无法消除间隙或移动剩余内容的位置。

标签: esp8266 esp32 arduino-esp8266 spiffs


【解决方案1】:

C 不支持更新文件的某些部分。

您可以将旧文件的内容复制到新文件中,然后在将其写入新文件之前更改一行。

或者,如果您使用的是 arduino 框架,也许您可​​以查看 settings 类 (或 NVS api,如果您使用的是 ESP IDF)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多