首页 > 解决方案 > SPIFFS 将返回键保存到字符串中

问题描述

在我的 ESP32 上使用 SPIFFS 逐行读取 .txt 文件时,它还会保存返回键,有没有办法防止这种情况发生?

阅读功能:

String line_one, line_two;

void readfiles() {
  char buffer[64];
  int i = 0;

  File file0 = SPIFFS.open("/0.txt", "r");
  while (file0.available()) {
   int l = file0.readBytesUntil('\n', buffer, sizeof(buffer));
   buffer[l] = 0;
   if (i == 0) {
    line_one = buffer;
   }
   if (i == 1) {
    line_two = buffer;
   }
   i++;
   if (i == 2){
    break;
   }  
  }
  file0.close();
} 

我的 0.txt 的内容:

2020-01-01
2021-03-16

我想在网页上的“字符串处理器”的帮助下显示它们:

String processor(const String& var){
  //JUST FOR EDIT
  if(var == "LINE_ONE"){
    return line_one;
  }
  else if(var == "LINE_TWO"){
    return line_two;
  }

网页:

<form action="/get">
  Date 1: <br><input type="date" name="1_input" id="1_input" value="%LINE_ONE%"><br><br>
  Date 2: <br><input type="date" name="2_input" id="2_input" value="%LINE_TWO%"><br><br><br>
  <input type="submit" value="Submit">
</form>

我预计它会设置日期,但它所做的是在 %LINE_ONE% 之后在我的代码中返回,以便 html 页面无法显示日期。第二行有效,因为它是最后一行没有不可见的返回键。

在这里你可以明白我的意思: 截屏

来自德国的感谢和问候!

标签: c++carduinoesp32spiffs

解决方案


我自己找到了答案。它与“回车”(/r)和“换行”(/n)有关。

Windows 记事本先执行 CR,然后在行尾执行 LF,因此我通过使用 notepad++ 删除 LF 并更改代码中的一行来解决此错误。

由此:

int l = file0.readBytesUntil('\n', buffer, sizeof(buffer));

对此:

int l = file0.readBytesUntil('\r', buffer, sizeof(buffer));

(如果我删除 CR,我的 ESP32 在启动时崩溃:“Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.”)


推荐阅读