Nil*_*r F 3 c++ arduino arduino-c++ esp32
我正在开发一个使用 Flash 数据保存的项目。我正在使用 ESP32 的 SPIFFS 库,目前正在尝试将每行的数据存储到字符串中。由于我可以控制文件中可以包含多少内容,因此不需要超过 3 个字符串来存储数据。我可以轻松地使用 来存储第一行内容readStringUntil
。但我无法从第 2 行和第 3 行获取内容。
\n对于第一行,我使用以下代码:
//Pegar a primeira linha do arquivo, onde ser\xc3\xa1 armazenado o nome do WIFI (ssid)\nvoid first_line (){\n file = SPIFFS.open("/wifi.txt", "r");\n\n while (file.available()) {\n String first_line = file.readStringUntil('\\n');\n Serial.print(first_line);\n break;\n }\n\n file.close();\n}\n
Run Code Online (Sandbox Code Playgroud)\n我使用此函数将代码写入文件:
\n// Escrever mensagem dentro do arquivo\nvoid write_file_info(String message) {\n file = SPIFFS.open("/wifi.txt", FILE_WRITE);\n\n if (!file){\n Serial.println("Error opening file");\n return;\n }else{\n Serial.println("Success opening file");\n }\n\n if (file.println(message)){\n Serial.println("File was written");\n }else{\n Serial.println("File was not written");\n }\n\n file.close();\n}\n
Run Code Online (Sandbox Code Playgroud)\n我使用 Append 添加第二行和第三行:
\nvoid append_file_info (String message){\n file = SPIFFS.open("/wifi.txt", FILE_APPEND);\n\n if (!file){\n Serial.println("Erro ao realizar APPEND ao arquivo");\n }\n\n if (file.println(message)){\n Serial.println("File was added");\n }else{\n Serial.println("File was not added");\n }\n\n file.close();\n}\n
Run Code Online (Sandbox Code Playgroud)\n这是当前的输出,文件大小仅供管理,“文件内内容”仅供参考:
\nFile size: 37\nContent inside file: \nfirst line\nsecond line\nthrid line\n
Run Code Online (Sandbox Code Playgroud)\n这就是我读取文件的方式:
\nvoid read_file_info() {\n file = SPIFFS.open("/wifi.txt");\n\n Serial.print("\\nFile size: ");\n Serial.println(file.size());\n\n Serial.print("Content inside file: \\n");\n while (file.available()){\n Serial.write(file.read());\n }\n\n Serial.println("\\n");\n\n file.close();\n delay(3000);\n}\n
Run Code Online (Sandbox Code Playgroud)\n我想过尝试读取“\\n”之后的数据,但找不到任何有关读取特定字符串之后的文档。
\n我尝试创建一个缓冲区并稍后将其分割,缓冲区的输出是正确的,但我无法正确地将其分割为字符串:
void second_line (){\n file = SPIFFS.open("/wifi.txt", "r");\n \n char buffer[64];\n while (file.available()) {\n int l = file.readBytesUntil('\\n', buffer, sizeof(buffer));\n buffer[l] = 0;\n Serial.println(buffer);\n }\n\n file.close();\n}\n
Run Code Online (Sandbox Code Playgroud)\n
使用向量会更简单:
#include <SPIFFS.h>
using namespace std;
void setup() {
Serial.begin(115200);
if (!SPIFFS.begin(true)) {
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
File file = SPIFFS.open("/wifi.txt", "r");
if (!file) {
Serial.println("Failed to open file for reading");
return;
}
vector<String> v;
while (file.available()) {
v.push_back(file.readStringUntil('\n'));
}
file.close();
for (String s : v) {
Serial.println(s);
}
}
void loop() {}
Run Code Online (Sandbox Code Playgroud)
用于v[0]
获取第一行、v[1]
第二行、v[2]
第三行等等。
归档时间: |
|
查看次数: |
12388 次 |
最近记录: |