首页 > 行业资讯 > 正文

本文来源电子发烧友社区,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2282703_1_1.html

Air105使用的是openluat,给我们提供了非常丰富的文件操作功能,今天我们就一次搞清楚基础的文件操作方式。一、文件系统openluat上的文件系统,分为如下几种:【合宙Air105开发板试用体验】在Air105上,一次搞懂openluat的基础文件操作-合宙dtu

注意,luadb下的文件,是只读的。

openluat中的文件操作对象,可以使用内置的Flash,也可以使用SPI Flash,还可以使用SD卡,本文的演示,使用的是内置的Flash。

二、文件操作方式

当前支持的常用文件操作方式,则分为如下几种:

io:普通io方式操作文件 nvm:ini方式操作的lua配置文件 fdb:kv方式操作数据,刷机也不会清除

三、io文件操作

io文件操作,是最基础的文件操作方式。

io文件操作的基本指令如下:

1. 打开文件:如果打开失败,则f为空

local f = io.open(“/文件名”, “标志位”)
复制代码

可供使用的标志位如下:

【合宙Air105开发板试用体验】在Air105上,一次搞懂openluat的基础文件操作-合宙dtu1

通常使用中:

如果要打开文件读取数据,则标志位使用r或者rb;

如果要打开文件写入数据,则标志位使用w或者wb,注意会清空文件

如果要打开文件追加数据,则标志位使用a或者ab

2. 读取数据:

— 读取首行
复制代码

3. 写入数据:

f:write(tostring(data))
复制代码

注意写入文件的时候,写入的是字符串。而读取的时候,再根据实际情况进行解析。

4. 关闭文件:

f:close()
复制代码

文件操作部分的实例,可以查看Air105的demo中的fs/Air105/main.lua:

复制代码
四、nvm操作

openluat的nvm操作,实际上是对io操作的一个特殊封装。

通常于存储配置,因为其数据存储必须是一个lua配置文件,样例如下:

–存储默认数据 –必须return一个table return { a=1, b=2 }
复制代码

这样的一个配置文件,是可以在lua脚本中,直接require的。

如果要读取值,则使用nvm.get(“a”)

如果要设置值,则使用nvm.set(a,1)

需要注意的是,只能操作config.lua中存在的key,否则出错。存在的key,其对应的value也不能为空,否则也会出错。

务必要提醒的是,因为每次修改后,都会整个配置数据一起保存,所以只适合较少配置数据的情况,不适合较多数据的设置读取。数据较多的情况,可以直接使用io文件操作。

nvm的具体操作,可以查看Air105的demo中的nvm/main.lua:

— LuaTools需要PROJECT和VERSION这两个信息
复制代码

需要注意的是,nvm.set(),默认的配置文件config.lua的内容,是不会发生变化的,需要用nvm.get()才能得到最新的值。

其具体处理的实际逻辑,可以查看nvm/nvm.lua了解;其中确保了即使断电,也不会造成配置数据丢失的逻辑。

五、fdb数据操作

openluat的还提供了一个简单的kv操作库fdb,可通过fdb.kv_ge和tfdb.kv_set来进行读写。

如果熟悉memcached或者redis的同学,对这个操作就会比较熟悉。

fdb存储的数据,刷机的时候,也不会丢失,除非主动删除对应的key。

fdb的主要操作指令如下:

— 初始化
复制代码

使用fdb.kv_set的时候,可以写入不同类型的数据,读取的时候,也会保持类型。

需要注意的是,fdb存储的数据,也不能使用空值。但读取不存在的key,则返回空值。

fdb基于flashdb实现的,具体实现逻辑,可以查看:https://gitee.com/openLuat/LuatOS/tree/master/components/flashdb/

fdb的具体操作,可以查看Air105的demo中的fdb/main.lua:

— LuaTools需要PROJECT和VERSION这两个信息
复制代码

总的来说,通常的文件操作,使用io文件操作,配置类的数据,使用nvm操作,而kv数据的存储,可以使用fdb。

例如:

如果需要存储图片等数据,或者读取文件内容进行分析之类的,可以用io文件操作。

如果是可以被用户修改的配置,可以用nvm操作。

如果是一个类似sn之类的数据,则可以考虑使用fdb。

猜你喜欢