划句顾 发表于 2021-8-23 13:49:24

ESP8266:闪存文件系统基本操作

本帖最后由 划句顾 于 2021-9-2 09:38 编辑



1.通过程序向闪存文件系统写入信息

代码如下:
/*
*Purpose:此程序用于演示如何向NodeMCU的SPIFFS中建立名为
         notes.txt的文件,程序还将向该文件写入信息。
*Author :LAOGU         
*Time   :2021/8/16
*/
#include <FS.h>

String file_name = "/arduino-esp8266 code/notes.txt"; //被读取的文件位置和名称这是一串字符串,是ESP8266的目录。

void setup() {
Serial.begin(9600);
Serial.println("");

Serial.println("SPIFFS format start"); //SPIFFS 全称是:Serial Peripheral Interface Flash File System
SPIFFS.format(); //格式化SPIFFS
Serial.println("SPIFFS format finish");

if (SPIFFS.begin())//启动SPIFFS
{
    Serial.println("SPIFFS Started.");
}
else
{
    Serial.println("SPIFFS Failed to start.");
   }

   File dataFile = SPIFFS.open(file_name,"w");   //建立File对象--dataFile,如果文件系统没有/arduino-esp8266 code/notes.txt文件,此操作将会在文件系统中建立该文件。如果文件系统有该文件,
                                                                                                         则程序将会重新建立该文件,即原有文件信息将会被覆盖。
   dataFile.println("Welcome to IOT World.");            //向dataFile文件写入信息 ,欢迎来到物联网世界
   dataFile.close();   //关闭文件
   Serial.println("Finished Writing data to SPIFFS");
}

void loop() {

}

static/image/hrline/5.gif

static/image/hrline/5.gif
注意:
SPIFFS.begin()用于启动闪存文件系统。在每次使用闪存文件系统以前都需要执行这一操作。如果闪存文件系统成功启动,该函数的返回值为布尔型,如果成功启动闪存文件形同,则返回真。否则将返回假。

static/image/hrline/5.gif
2.通过程序从闪存文件系统读取信息
代码如下:
/*
*Purpose:此程序用于演示如何从NodeMCU的内置SPIFFS中存储的文件notes.txt读取数据。
          notes.txt 文件内容将会通过串口监视器显示出来供用户确认。
          注意在使用本程序以前需要先将notes.txt 文件上传到NodeMCU开发板的SPIFFS中
*
*Author :LAOGU         
*Time   :2021/8/16
*/
#include<FS.h>

String file_name="/arduino-esp8266 code/notes.txt";

void setup() {
Serial.begin(9600);
Serial.println("");

if(SPIFFS.begin()){
   Serial.println("SPIFFS Started.");
}
else{
   Serial.println("SPIFFS Failed to Start.");
}

if(SPIFFS.exists(file_name)) {
Serial.println(file_name);
Serial.println("FOUND.");
}
else{
    Serial.println(file_name);
    Serial.println("NOT FOUND.");
   }

   File dataFile = SPIFFS.open(file_name,"r");

   for(int i = 0;i<dataFile.size();i++){
    Serial.print((char)dataFile.read());
   }

   dataFile.close(); //读取后关闭文件
}

void loop() {
}

static/image/hrline/5.gif


static/image/hrline/5.gif
注意:dataFile.read()将会读取dataFile文件内容。dataFile.read()返回的是字符的ASCII码,所以dataFile.read()前面要加char这样每调用一次都会返回dataFile文件中一个字符。再次调用,将会返回下一个字符。以此类推,直到dataFile结尾。通过for循环语句,程序将会依次读取dataFile文件内容,并且将文件内容逐字符输出于串口监视器中。

static/image/hrline/5.gif
3.通过程序向闪存文件系统文件添加信息
代码如下:
/*
*Purpose:此程序用于演示如何向NodeMCU的内置SPIFFS中存储的文件
          notes.txt添加数据。   
*Author :LAOGU         
*Time   :2021/8/17
*/
#include <FS.h>

String file_name = "/arduino-esp8266 code/notes.txt"; //被读取的文件位置和名称

void setup() {
Serial.begin(9600);
Serial.println("");

if (SPIFFS.begin())//启动SPIFFS
{
    Serial.println("SPIFFS Started.");
}
else{
    Serial.println("SPIFFS Failed to start.");
   }
   
if(SPIFFS.exists(file_name)) {
Serial.print(file_name);
Serial.println("FOUND.");

File dataFile = SPIFFS.open(file_name,"a"); //建立File对象--dataFile
dataFile.println("This is a text.");
dataFile.close();   //关闭文件
Serial.println("Finished Appending data to SPIFFS");
    }
   else{
    Serial.print(file_name);
    Serial.println("NOT FOUND.");
   }
}

void loop() {
}

static/image/hrline/5.gif


static/image/hrline/5.gif
运行第二个代码,得到下图:


static/image/hrline/5.gif
4.通过程序读取目录内容
/*
*Purpose:此程序用于演示如何从NodeMCU的内置SPIFFS中文件夹里读取文件信息
          文件夹内容将会通过串口监视器显示出来。
*Author :LAOGU         
*Time   :2021/8/17
*/

#include <FS.h>

String file_name = "/ESPCode-TEXT/notes.txt"; //被读取的文件位置和名称
String folder_name = "/ESPCode-TEXT";//被读取的文件夹

void setup() {
Serial.begin(9600);
Serial.println("");

if (SPIFFS.begin())//启动闪存文件
{
    Serial.println("SPIFFS Started.");
}
else{
    Serial.println("SPIFFS Failed to start.");
   }
   

File dataFile = SPIFFS.open(file_name,"w"); //建立File对象--dataFile
dataFile.println("Hello ESP8266-Code.");
dataFile.close();   //关闭文件
Serial.println("Finished Writing data to SPIFFS");

//显示目录中文件内容以及文件大小
   Dir dir = SPIFFS.openDir(folder_name);//建立“目录对象”

//dir.next()用于检查目录中是否还有“下一个文件”
   while(dir.next()){
    Serial.println(dir.fileName());
    }
}

void loop() {
}

static/image/hrline/5.gif


static/image/hrline/5.gif
运行第二个代码,读取信息,信息如下图:


static/image/hrline/5.gif
5. 从闪存文件系统中删除文件
/*
*Purpose:此程序用于演示如何删除SPIFFS中存储的文件   
*Author :LAOGU         
*Time   :2021/8/17
*/

#include <FS.h>

String file_name = "/ESPCode-TEXT/notes.txt"; //被读取的文件位置和名称

void setup() {
Serial.begin(9600);
Serial.println("");

if (SPIFFS.begin())//启动闪存文件
{
    Serial.println("SPIFFS Started.");
}
else{
    Serial.println("SPIFFS Failed to start.");
   }
   
if(SPIFFS.remove(file_name)){
    Serial.print(file_name);
    Serial.println("remove success");
    }else{
      Serial.print(file_name);
      Serial.println("remove fail");
    }
}

void loop() {
}

static/image/hrline/5.gif


static/image/hrline/5.gif
6. 显示闪存文件系统信息
/*
*Purpose:此程序用于演示如何使用FSInfo对象来显示闪存文件系统状态   
*Author :LAOGU         
*Time   :2021/8/17
*/
#include<FS.h>
FSInfo fs_info;
void setup() {
Serial.begin(9600);

SPIFFS.begin();
Serial.println("");
Serial.println("SPIFFS Started.");

//闪存文件系统信息
SPIFFS.info(fs_info);

//可用空间总和(单位:字节)
Serial.print("totalBytes: ");
Serial.print(fs_info.totalBytes);
Serial.println(" Bytes");

//已用空间(单位:字节)
Serial.print("usedBytes: ");
Serial.print(fs_info.usedBytes);
Serial.println(" Bytes");

//最大文件名字符限制(含路径和'\0')
Serial.print("maxPathLength: ");
Serial.println(fs_info.maxPathLength);

// 最多允许打开文件数量
Serial.print("maxOpenFiles: ");
Serial.println(fs_info.maxOpenFiles);

//存储块大小
Serial.print("blockSize: ");
Serial.println(fs_info.blockSize);

//存储页大小
Serial.print("pagaSize: ");
Serial.println(fs_info.pageSize);
}

void loop() {
}

static/image/hrline/5.gif
页: [1]
查看完整版本: ESP8266:闪存文件系统基本操作