鱼C论坛

 找回密码
 立即注册
查看: 2733|回复: 0

[其他分类] ESP8266:闪存文件系统基本操作

[复制链接]
发表于 2021-8-23 13:49:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

1.jpg

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() {
  
}


                               
登录/注册后可看大图

1629128635(1).jpg

                               
登录/注册后可看大图

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


                               
登录/注册后可看大图

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() {
}


                               
登录/注册后可看大图

1629129184(1).jpg


                               
登录/注册后可看大图

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


                               
登录/注册后可看大图

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() {
}


                               
登录/注册后可看大图

1629130205(1).jpg


                               
登录/注册后可看大图

运行第二个代码,得到下图:
1629130645(1).jpg


                               
登录/注册后可看大图

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() {
}


                               
登录/注册后可看大图

1 (1).jpg


                               
登录/注册后可看大图

运行第二个代码,读取信息,信息如下图:
2.jpg


                               
登录/注册后可看大图

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() {
}


                               
登录/注册后可看大图

3.jpg


                               
登录/注册后可看大图

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() {
}


                               
登录/注册后可看大图

1629697718(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表