首页 > 解决方案 > 在 ESP8266 ESP-01 上写入后无法读取文件内容

问题描述

我尝试在 ESP8266 ESP-01 上的 SPIFFS 上做一些基本的读/写文件。写入文件后,如果我尝试读取它,它总是返回 0 个读取字节。相同的代码在 NodeMCU 10(ESP12E 模块)上运行良好。

有趣的是,我可以将文件上传到 ESP8266-01 SPIFFS(我在 Visual Studio 中使用 vMicro 进行开发并“发布服务器数据文件(spiffs)”)并用我的代码读取它们。只有当我写一个文件时,读取才不适用于该文件。我为 ESP-01“通用 ESP8266 模块”(闪存大小 1M、512K、SPIFFS 大小 32K、64K、128K)尝试了不同的组合,结果相同。

草图代码在这里(包括许多调试语句):

#include <FS.h>

const char* fileName = "/abc.txt";

void setup() {
    Serial.begin(115200);
    delay(5000);

    Serial.println("\n\nStarting...");

    if (SPIFFS.begin()) {
        Serial.println("begin OK");

        if (SPIFFS.format()) {
            Serial.println("format OK");

            auto fW = SPIFFS.open(fileName, "w");
            if (fW) {
                Serial.println("Open W OK");

                auto nWritten = fW.write((byte*)"aaaAAA", 6);
                Serial.printf("Written: %d\n", nWritten);

                fW.close();
                Serial.println("Closed W OK");
            }
            else {
                Serial.println("Failed opening W");
            }

            delay(5000);
            Serial.println("");

            auto fR = SPIFFS.open(fileName, "r");
            if (fR) {
                Serial.println("Open R OK");

                auto fSize = fR.size();
                Serial.printf("Size: %d\n", fSize);

                Serial.printf("Position: %d\n", fR.position());

                if (!fR.seek(0)) {
                    Serial.println("****Seek failed!");
                }
                Serial.printf("Position: %d\n", fR.position());
                Serial.printf("Available: %d\n", fR.available());

                char buffer[20] = { 0 };
                auto nRead = fR.readBytes(buffer, fSize);
                Serial.printf("nRead: %d\n", nRead);
                Serial.printf("Data: [%s]\n", buffer);

                fR.close();
                Serial.println("Closed R OK");
            }
            else {
                Serial.println("Failed opening R");
            }
        }
    }
}

void loop() {
}

输出在这里。请注意,大小为 6(这是正确的)但 nRead 为 0,并且 [] 之间的数据为空。

Starting...
begin OK
format OK
Open W OK
Written: 6
Closed W OK

Open R OK
Size: 6
Position: 0
Position: 0
Available: 6
nRead: 0
Data: []
Closed R OK

如果我注释掉 SPIFFS.format() 语句(因为在第二次加载草图时 SPIFFS 已经格式化并且文件已经存在)我什至无法打开文件进行写入。

那么,ESP-01 上的 SPIFFS 是否存在写入问题,我该怎么做才能成功写入文件?

标签: esp8266spiffs

解决方案


推荐阅读