鱼C论坛

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

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

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

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

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

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

1.jpg

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

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

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

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

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

  15.   if (SPIFFS.begin())  //启动SPIFFS
  16.   {
  17.     Serial.println("SPIFFS Started.");
  18.   }
  19.   else
  20.   {
  21.     Serial.println("SPIFFS Failed to start.");
  22.    }

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

  29. void loop() {
  30.   
  31. }
复制代码



                               
登录/注册后可看大图

1629128635(1).jpg

                               
登录/注册后可看大图

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


                               
登录/注册后可看大图

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

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

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

  14.   if(SPIFFS.begin()){
  15.      Serial.println("SPIFFS Started.");
  16.   }
  17.   else{
  18.      Serial.println("SPIFFS Failed to Start.");
  19.   }

  20.   if(SPIFFS.exists(file_name)) {
  21.   Serial.println(file_name);
  22.   Serial.println("FOUND.");
  23.   }
  24.   else{
  25.     Serial.println(file_name);
  26.     Serial.println("NOT FOUND.");
  27.    }

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

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

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

  34. void loop() {
  35. }
复制代码



                               
登录/注册后可看大图

1629129184(1).jpg


                               
登录/注册后可看大图

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


                               
登录/注册后可看大图

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

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

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

  12.   if (SPIFFS.begin())  //启动SPIFFS
  13.   {
  14.     Serial.println("SPIFFS Started.");
  15.   }
  16.   else{
  17.     Serial.println("SPIFFS Failed to start.");
  18.    }
  19.    
  20.   if(SPIFFS.exists(file_name)) {
  21.   Serial.print(file_name);
  22.   Serial.println("  FOUND.");
  23.   
  24.   File dataFile = SPIFFS.open(file_name,"a"); //建立File对象--dataFile
  25.   dataFile.println("This is a text.");
  26.   dataFile.close();   //关闭文件
  27.   Serial.println("Finished Appending data to SPIFFS");
  28.     }
  29.    else{
  30.     Serial.print(file_name);
  31.     Serial.println("  NOT FOUND.");
  32.    }
  33. }

  34. void loop() {
  35. }
复制代码



                               
登录/注册后可看大图

1629130205(1).jpg


                               
登录/注册后可看大图

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


                               
登录/注册后可看大图

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

  7. #include <FS.h>

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

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

  13.   if (SPIFFS.begin())  //启动闪存文件
  14.   {
  15.     Serial.println("SPIFFS Started.");
  16.   }
  17.   else{
  18.     Serial.println("SPIFFS Failed to start.");
  19.    }
  20.    

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

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

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

  32. void loop() {
  33. }
复制代码



                               
登录/注册后可看大图

1 (1).jpg


                               
登录/注册后可看大图

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


                               
登录/注册后可看大图

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

  6. #include <FS.h>

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

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

  11.   if (SPIFFS.begin())  //启动闪存文件
  12.   {
  13.     Serial.println("SPIFFS Started.");
  14.   }
  15.   else{
  16.     Serial.println("SPIFFS Failed to start.");
  17.    }
  18.    
  19.   if(SPIFFS.remove(file_name)){
  20.     Serial.print(file_name);
  21.     Serial.println("  remove success");
  22.     }else{
  23.       Serial.print(file_name);
  24.       Serial.println("  remove fail");
  25.     }
  26. }

  27. void loop() {
  28. }
复制代码



                               
登录/注册后可看大图

3.jpg


                               
登录/注册后可看大图

6. 显示闪存文件系统信息
  1. /*
  2. *Purpose:此程序用于演示如何使用FSInfo对象来显示闪存文件系统状态   
  3. *Author :LAOGU         
  4. *Time   :2021/8/17
  5. */
  6. #include<FS.h>
  7. FSInfo fs_info;
  8. void setup() {
  9.   Serial.begin(9600);
  10.   
  11.   SPIFFS.begin();
  12.   Serial.println("");
  13.   Serial.println("SPIFFS Started.");

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

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

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

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

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

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

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

  37. void loop() {
  38. }
复制代码



                               
登录/注册后可看大图

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 01:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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