C++ 使用SPIFFS保存的Arduino IDE ESP32设备

C++ 使用SPIFFS保存的Arduino IDE ESP32设备,c++,c,esp32,arduino-ide,spiffs,C++,C,Esp32,Arduino Ide,Spiffs,我正在编写ESP32程序并使用SPIFFS保存一些数据,因为我不想在关闭设备电源后丢失它 我有两个功能: char* readFile(fs::FS &fs, const char *path) { Serial.printf("Reading file: %s\n", path); File file = fs.open(path); if (!file || file.isDirectory()) { Serial

我正在编写ESP32程序并使用SPIFFS保存一些数据,因为我不想在关闭设备电源后丢失它

我有两个功能:

char* readFile(fs::FS &fs, const char *path)
{
    Serial.printf("Reading file: %s\n", path);

    File file = fs.open(path);
    if (!file || file.isDirectory())
    {
        Serial.println("Failed to open file for reading");
        return "FAIL";
    }

    Serial.print("Read from file: ");
    while (file.available())
    {
        Serial.write(file.read());
        delayMicroseconds(100);
        //TODO
        //append all characters and return it as a list of char arrays at the end of reading
    }
    file.close();
    
}


void writeFile(fs::FS &fs, const char *path, const char *message)
{
    Serial.printf("Writing file: %s\n", path);

    File file = fs.open(path, FILE_WRITE);
    if (!file)
    {
        Serial.println("Failed to open file for writing");
        return;
    }
    if (file.print(message))
    {
        Serial.println("File written");
    }
    else
    {
        Serial.println("Write failed");
    }

    file.close();
}
首先,我运行程序并调用writeFile(),然后调用readFile():

从上面的串行监视器中可以看到,我的程序识别我写入spifs/wifi.txt文件的文本。然而,当我进入实际项目目录并打开data/wifi.txt时,它是emtpy:

这怎么会发生?我的程序确认里面有数据,但它不会显示在文件中

更新2

我对SPIFF做了一些进一步的测试

在我的数据文件夹中,我创建了另一个txt文件test.txt。在那里,我手动放了一些文字“这是短信”

在我的程序中,我调用了函数:

char* returned_data = readFile(SPIFFS, "/test.txt");
串行监视器成功地打印了我输入的信息。因此,这证明SPIFFS能够从文件中读取,而不会出现任何问题

然后,我修改了我的程序:

    writeFile(SPIFFS, "/test.txt", "hello123");
    char* returned_data = readFile(SPIFFS, "/test.txt");
上面的代码应该用“hello123”覆盖我写在txt文件中的任何内容,然后我的程序应该从Spiffs中读取“hello123”。串行监视器响应:

Listing directory: /
  FILE: /update.bin  SIZE: 0
  FILE: /wifi.txt  SIZE: 2
  FILE: /test.txt  SIZE: 8
Writing file: /test.txt
File written
Reading file: /wifi.txt
Read from file: 
Reading file: /test.txt
Read from file: hello123
如您所见,它能够成功地读回“hello123”

然而当我转到我的项目文件夹,打开data/test.txt时,我仍然可以看到我的初始文本没有被替换为“hello123”。


我不明白这是怎么回事。

请将串行输出作为文本(使用代码标签)而不是屏幕截图发布。不管怎样,您是如何设置文件系统分区的?谢谢您的回复。我已经设法解决了这个问题。我只是错过了这里描述的一个关键步骤:。不管怎么说,我还有另一个问题。我已经更新了我最初的帖子来描述它为什么wifi.txt上显示大小为1KB,而它是空的?你的文件中有数据,但记事本没有显示。使用十六进制编辑器查看实际内容。您确定在计算机中看到的是由ESP32代码创建的文件吗?我不知道那里的Arduino部件是如何工作的,但我希望内部闪存上的文件系统通过USB或类似的机制根本看不见。
    writeFile(SPIFFS, "/test.txt", "hello123");
    char* returned_data = readFile(SPIFFS, "/test.txt");
Listing directory: /
  FILE: /update.bin  SIZE: 0
  FILE: /wifi.txt  SIZE: 2
  FILE: /test.txt  SIZE: 8
Writing file: /test.txt
File written
Reading file: /wifi.txt
Read from file: 
Reading file: /test.txt
Read from file: hello123