如何解决逐行读取文件并存入字符串,Flash数据保存SPIFFS
我正在处理一个具有 Flash 数据保存功能的项目。我正在为 ESP32 使用 SPIFFS 库,我目前正在尝试将每一行的数据存储到一个字符串中。由于我可以控制可以进入文件的内容数量,因此存储数据不需要超过 3 个字符串。我可以轻松地使用 readStringUntil
存储第一行内容。但是我无法从第 2 行和第 3 行获取内容。
对于第一行,我使用此代码:
//Pegar a primeira linha do arquivo,onde será armazenado o nome do WIFI (ssid)
void first_line (){
file = SPIFFS.open("/wifi.txt","r");
while (file.available()) {
String first_line = file.readStringUntil('\n');
Serial.print(first_line);
break;
}
file.close();
}
// Escrever mensagem dentro do arquivo
void write_file_info(String message) {
file = SPIFFS.open("/wifi.txt",FILE_WRITE);
if (!file){
Serial.println("Error opening file");
return;
}else{
Serial.println("Success opening file");
}
if (file.println(message)){
Serial.println("File was written");
}else{
Serial.println("File was not written");
}
file.close();
}
我正在使用 Append 添加第二行和第三行:
void append_file_info (String message){
file = SPIFFS.open("/wifi.txt",FILE_APPEND);
if (!file){
Serial.println("Erro ao realizar APPEND ao arquivo");
}
if (file.println(message)){
Serial.println("File was added");
}else{
Serial.println("File was not added");
}
file.close();
}
File size: 37
Content inside file:
first line
second line
thrid line
这是我阅读文件的方式:
void read_file_info() {
file = SPIFFS.open("/wifi.txt");
Serial.print("\nFile size: ");
Serial.println(file.size());
Serial.print("Content inside file: \n");
while (file.available()){
Serial.write(file.read());
}
Serial.println("\n");
file.close();
delay(3000);
}
我想尝试读取 '\n' 之后的数据,但找不到任何关于读取特定字符串之后的文档。
我尝试创建一个缓冲区并稍后对其进行拆分,缓冲区的输出是正确的,但我无法将其正确拆分为字符串:
void second_line (){
file = SPIFFS.open("/wifi.txt","r");
char buffer[64];
while (file.available()) {
int l = file.readBytesUntil('\n',buffer,sizeof(buffer));
buffer[l] = 0;
Serial.println(buffer);
}
file.close();
}
解决方法
我可以设法让它像这样工作:
void all_lines (){
file = SPIFFS.open("/wifi.txt","r");
int i = 0;
char buffer[64];
String line_one,line_two,line_three;
while (file.available()) {
int l = file.readBytesUntil('\n',buffer,sizeof(buffer));
buffer[l] = 0;
if (i == 0) {
line_one = buffer;
}
if (i == 1) {
line_two = buffer;
}
if (i == 2) {
line_three = buffer;
}
i++;
if (i == 3){
break;
}
}
file.close();
}
,
使用向量会更简单:
#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");
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() {}
使用 v[0]
获取第一行,v[1]
获取第二行,v[2]
获取第三行,依此类推。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。