文件系统(io)
一、简介
文件系统为用户代码运行过程中动态生成的文件提供了存储空间,这个空间被称为文件系统分区。
模块具有 64Mb 的 flash 空间,除了模块自身程序占用以外还剩余了一部分空间可供用户使用,用户可以在这个空间内创建、读取、写入和删除文件,以支持模组在各种应用场景中的需求。
二、演示功能概述
本教程教你如何用 Air724 开发板,进行文件系统功能演示,如创建、读取、写入和删除文件。
三、准备硬件环境
3.1 开发板准备
使用 EVB_Air724 开发板,如下图所示:
淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接 ;
此开发板的详细使用说明参考:Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。
api:https://doc.openluat.com/wiki/21?wiki_page_id=2068
3.2 数据通信线
USB 数据线一根(micro USB)。
3.3 PC 电脑
WIN7 以及以上版本的 WINDOWS 系统。
3.4 SIM 卡
中国大陆环境下,可以上网的 SIM 卡。一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。
3.5 组装硬件环境
USB 数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,SIM 卡放到 SIM 卡槽中锁紧,如下图所示。
四、准备软件环境
4.1 下载调试工具
使用说明参考:Luatools 下载和详细使用
4.2 源码及固件
1.底层 core 下载
下载底层固件,并解压
链接:https://docs.openluat.com/air724ug/luatos/firmware/
如下图所示,红框的是我们要使用到的。
2.本教程使用的 demo:
https://gitee.com/openLuat/LuatOS-Air724UG/tree/master/script_LuaTask/demo/fs
4.3 下载固件和脚本到开发板中
打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。
点击项目管理测试选项。
进入管理界面,如下图所示。
- 点击选择文件,选择底层固件,我的文件放在 D:\luatOS\Air724 路径中。
- 点击增加脚本或资源文件,选择 之前下载的程序源码,如下图所示。
- 点击下载底层和脚本,下载完成如下图所示。
五、代码示例介绍
5.1 API 说明
LuatOS 的文件操作来自标准 lua 的 io 库直接按照标准语法使用即可,
除了标准语法,LuatOS 提供了几个更方便的文件操作接口可以使用。
API 接口 | 描述 |
---|---|
io.exists(path) | 判断文件是否存在 |
io.readFile(path) | 读取文件并返回文件的内容 |
io.writeFile(path, content, mode) | 写入文件指定的内容,默认为覆盖二进制模式 |
io.pathInfo(path) | 将文件路径分解为 table 信息 |
io.fileSize(path) | 返回文件大小 |
io.readStream(path, offset, len) | 返回指定位置读取的字符串 |
rtos.make_dir(path) | 创建目录 |
rtos.remove_dir(path) | 删除目录 |
os.remove() | 删除文件 |
os.rename (oldname, newname) | 文件重命名 |
详细的 API 介绍见 io API 章节
5.2 testFs.lua 代码
系统启动后,每隔 5 秒打印文件系统的剩余空间。
--- 模块功能:文件操作功能测试.
-- @author openLuat
-- @module fs.testFs
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.27
module(...,package.seeall)
local USER_DIR_PATH = "/user_dir"
--[[该demo提供四种接口,第一种readfile(filename)读文件,第二种writevala(filename,value),写文件内容,附加模式,
第三种function writevalw(filename,value),写文件内容,覆盖模式,第四种deletefile(filename),删除文件。--]]
--[[
函数名:readfile(filename)
功能:打开所输入文件名的文件,并输出储存在里面额内容
参数:文件名
返回值:无 ]]
local function readfile(filename)--打开指定文件并输出内容
local filehandle=io.open(filename,"r")--第一个参数是文件名,第二个是打开方式,'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then --判断文件是否存在
local fileval=filehandle:read("*all")--读出文件内容
if fileval then
print(fileval) --如果文件存在,打印文件内容
filehandle:close()--关闭文件
else
print("文件为空")--文件不存在
end
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名: writevala(filename,value)
功能:向输入的文件中添加内容,内容附加在原文件内容之后
参数:第一个文件名,第二个需要添加的内容
返回值:无 --]]
local function writevala(filename,value)--在指定文件中添加内容,函数名最后一位就是打开的模式
local filehandle = io.open(filename,"a+")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
filehandle:write(value)--写入要写入的内容
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名:writevalw(filename,value)
功能:向输入文件中添加内容,新添加的内容会覆盖掉原文件中的内容
参数:同上
返回值:无 --]]
local function writevalw(filename,value)--在指定文件中添加内容
local filehandle = io.open(filename,"w")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
filehandle:write(value)--写入要写入的内容
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[函数名:deletefile(filename)
功能:删除指定文件
参数:文件名
返回值:无 --]]
local function deletefile(filename)
os.remove(filename)
end
--打印文件系统的剩余空间
print("get_fs_free_size: "..rtos.get_fs_free_size().." Bytes")
sys.timerLoopStart(function() print("get_fs_free_size: "..rtos.get_fs_free_size().." Bytes") end,5000)
--成功创建一个目录(目录已存在,也返回true表示创建成功)
if rtos.make_dir(USER_DIR_PATH) then
log.info("testFs.readfile")
readfile(USER_DIR_PATH.."/3.txt")
log.info("testFs.writevala")
writevala(USER_DIR_PATH.."/3.txt","great")
log.info("testFs.readfile")
readfile(USER_DIR_PATH.."/3.txt")
log.info("testFs.writevalw")
writevalw(USER_DIR_PATH.."/3.txt","great")
log.info("testFs.readfile")
readfile(USER_DIR_PATH.."/3.txt")
log.info("testFs.deletefile")
deletefile(USER_DIR_PATH.."/3.txt")
log.info("testFs.readfile")
readfile(USER_DIR_PATH.."/3.txt")
end
5.3 main.lua 代码
本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,等待网络连接成功,然后加载测试模块。
5.4 testFs1basic.lua 代码
这个脚本用于测试文件系统的基础功能,例如文件的创建、删除、读取、写入等。并且打印输出日志。
--- 模块功能:文件操作功能测试.
-- @author openLuat
-- @module fs.testFs
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.27
module(...,package.seeall)
local USER_DIR1,USER_DIR11 = "/dir1","/dir11"
local USER_DIR2,USER_DIR21,USER_DIR211 = "/dir2","/dir21","/dir211"
local USER_DIR3 = "/dir3"
--[[该demo提供四种接口,第一种readfile(filename)读文件,第二种writevala(filename,value),写文件内容,附加模式,
第三种function writevalw(filename,value),写文件内容,覆盖模式,第四种deletefile(filename),删除文件。--]]
--[[
函数名:readfile(filename)
功能:打开所输入文件名的文件,并输出储存在里面额内容
参数:文件名
返回值:无 ]]
local function readfile(filename)--打开指定文件并输出内容
local filehandle=io.open(filename,"r")--第一个参数是文件名,第二个是打开方式,'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then --判断文件是否存在
local fileval=filehandle:read("*all")--读出文件内容
if fileval then
print(fileval) --如果文件存在,打印文件内容
filehandle:close()--关闭文件
else
print("The file is empty")--文件不存在
end
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名: writevala(filename,value)
功能:向输入的文件中添加内容,内容附加在原文件内容之后
参数:第一个文件名,第二个需要添加的内容
返回值:无 --]]
local function writevala(filename,value)--在指定文件中添加内容,函数名最后一位就是打开的模式
local filehandle = io.open(filename,"a+")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
filehandle:write(value)--写入要写入的内容
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名:writevalw(filename,value)
功能:向输入文件中添加内容,新添加的内容会覆盖掉原文件中的内容
参数:同上
返回值:无 --]]
local function writevalw(filename,value)--在指定文件中添加内容
local filehandle = io.open(filename,"w")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
filehandle:write(value)--写入要写入的内容
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[函数名:deletefile(filename)
功能:删除指定文件中的所有内容
参数:文件名
返回值:无 --]]
local function deletefile(filename)--删除指定文件夹中的所有内容
local filehandle = io.open(filename,"w")
if filehandle then
filehandle:write()--写入空的内容
print("successfully delete")
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--打印文件系统的剩余空间
print("get_fs_free_size: "..rtos.get_fs_free_size().." Bytes")
--成功创建一个目录(目录已存在,也返回true表示创建成功)
local function dir1test()
if rtos.make_dir(USER_DIR1) then
if rtos.make_dir(USER_DIR11) then
--readfile(USER_DIR11.."/file11.txt")
writevala(USER_DIR11.."/file11.txt","file11 test")
readfile(USER_DIR11.."/file11.txt")
writevalw(USER_DIR11.."/file11.txt","file11 test2")
--deletefile(USER_DIR11.."/file11.txt")
local rt = os.remove(USER_DIR11.."/file11.txt")
print("dir1test file11 os.remove rt",rt)
readfile(USER_DIR11.."/file11.txt")
--readfile(USER_DIR11.."/file12.txt")
writevala(USER_DIR11.."/file12.txt","file11 test")
readfile(USER_DIR11.."/file12.txt")
writevalw(USER_DIR11.."/file12.txt","file11 test2")
--deletefile(USER_DIR11.."/file12.txt")
local rt = os.remove(USER_DIR11.."/file12.txt")
print("dir1test file12 os.remove rt",rt)
readfile(USER_DIR11.."/file12.txt")
end
end
end
local function dir2test()
if rtos.make_dir(USER_DIR2) then
if rtos.make_dir(USER_DIR21) then
rtos.make_dir(USER_DIR211)
--readfile(USER_DIR21.."/file21.txt")
writevala(USER_DIR21.."/file21.txt","file21 test")
readfile(USER_DIR21.."/file21.txt")
writevalw(USER_DIR21.."/file21.txt","file21 test2")
--deletefile(USER_DIR21.."/file21.txt")
local rt = os.remove(USER_DIR21.."/file21.txt")
print("dir2test file21 os.remove rt",rt)
readfile(USER_DIR21.."/file21.txt")
--readfile(USER_DIR21.."/file3.txt")
writevala(USER_DIR21.."/file3.txt","file3 test")
readfile(USER_DIR21.."/file3.txt")
writevalw(USER_DIR21.."/file3.txt","file3 test2")
--deletefile(USER_DIR21.."/file3.txt")
local rt = os.remove(USER_DIR21.."/file3.txt")
print("dir2test file3 os.remove rt",rt)
readfile(USER_DIR21.."/file3.txt")
end
end
end
local function file1test()
--readfile("/file1.txt")
writevala("/file1.txt","file1 test")
readfile("/file1.txt")
writevalw("/file1.txt","file1 test2")
--deletefile("/file1.txt")
local rt = os.remove("/file1.txt")
print("file1test os.remove rt",rt)
readfile("/file1.txt")
end
local function file3test()
--readfile("/file3.txt")
writevala("/file3.txt","file3 test")
readfile("/file3.txt")
writevalw("/file3.txt","file3 test2")
--deletefile("/file3.txt")
local rt = os.remove("/file3.txt")
print("file3test os.remove rt",rt)
readfile("/file3.txt")
end
local function file4test()
--readfile("/file4.txt")
writevala("/file4.txt","file4 test")
readfile("/file4.txt")
writevalw("/file4.txt","file4 test2")
--deletefile("/file4.txt")
local rt = os.remove("/file4.txt")
print("file4test os.remove rt",rt)
readfile("/file4.txt")
end
local function dir3test()
if rtos.make_dir(USER_DIR3) then
print("MAKE DIR3 SUCC")
else
print("MAKE DIR3 FAIL")
end
end
local function test()
file1test()
dir1test()
dir2test()
file3test()
file4test()
dir3test()
end
sys.timerLoopStart(test,1000)
5.5 testFs2sysperform.lua 代码
这个脚本用来测试文件系统相关的性能。读写速度、文件创建和删除的速度、文件操作的响应时间等进行压力测试。
--- 模块功能:文件操作功能测试.
-- @author openLuat
-- @module fs.testFs
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.27
module(...,package.seeall)
local USER_DIR1,USER_DIR11 = "/dir1","/dir11"
local USER_DIR2,USER_DIR21,USER_DIR211 = "/dir2","/dir21","/dir211"
local USER_DIR3 = "/dir3"
local rt = true
--[[该demo提供四种接口,第一种readfile(filename)读文件,第二种writevala(filename,value),写文件内容,附加模式,
第三种function writevalw(filename,value),写文件内容,覆盖模式,第四种deletefile(filename),删除文件。--]]
--[[
函数名:readfile(filename)
功能:打开所输入文件名的文件,并输出储存在里面额内容
参数:文件名
返回值:无 ]]
local function readfile(filename)--打开指定文件并输出内容
local filehandle=io.open(filename,"r")--第一个参数是文件名,第二个是打开方式,'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then --判断文件是否存在
local fileval=filehandle:read("*all")--读出文件内容
if fileval then
print(filename) --如果文件存在,打印文件内容
filehandle:close()--关闭文件
else
print("The file is empty")--文件不存在
end
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名: writevala(filename,value)
功能:向输入的文件中添加内容,内容附加在原文件内容之后
参数:第一个文件名,第二个需要添加的内容
返回值:无 --]]
local function writevala(filename,value)--在指定文件中添加内容,函数名最后一位就是打开的模式
local filehandle = io.open(filename,"a+")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
rt = filehandle:write(value)--写入要写入的内容
print("writevala rt",rt)
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名:writevalw(filename,value)
功能:向输入文件中添加内容,新添加的内容会覆盖掉原文件中的内容
参数:同上
返回值:无 --]]
local function writevalw(filename,value)--在指定文件中添加内容
local filehandle = io.open(filename,"w")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
rt = filehandle:write(value)--写入要写入的内容
print("writevalw rt",rt)
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[函数名:deletefile(filename)
功能:删除指定文件中的所有内容
参数:文件名
返回值:无 --]]
local function deletefile(filename)--删除指定文件夹中的所有内容
local filehandle = io.open(filename,"w")
if filehandle then
filehandle:write()--写入空的内容
print("successfully delete")
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--打印文件系统的剩余空间
print("get_fs_free_size: "..rtos.get_fs_free_size().." Bytes")
--成功创建一个目录(目录已存在,也返回true表示创建成功)
local function dir1test()
if rtos.make_dir(USER_DIR1) then
if rtos.make_dir(USER_DIR11) then
readfile(USER_DIR11.."/file11.txt")
writevala(USER_DIR11.."/file11.txt","file11 test")
readfile(USER_DIR11.."/file11.txt")
writevalw(USER_DIR11.."/file11.txt","file11 test2")
deletefile(USER_DIR11.."/file11.txt")
readfile(USER_DIR11.."/file11.txt")
readfile(USER_DIR11.."/file12.txt")
writevala(USER_DIR11.."/file12.txt","file11 test")
readfile(USER_DIR11.."/file12.txt")
writevalw(USER_DIR11.."/file12.txt","file11 test2")
deletefile(USER_DIR11.."/file12.txt")
readfile(USER_DIR11.."/file12.txt")
end
end
end
local function dir2test()
if rtos.make_dir(USER_DIR2) then
if rtos.make_dir(USER_DIR21) then
rtos.make_dir(USER_DIR211)
readfile(USER_DIR21.."/file21.txt")
writevala(USER_DIR21.."/file21.txt","file21 test")
readfile(USER_DIR21.."/file21.txt")
writevalw(USER_DIR21.."/file21.txt","file21 test2")
deletefile(USER_DIR21.."/file21.txt")
readfile(USER_DIR21.."/file21.txt")
readfile(USER_DIR21.."/file3.txt")
writevala(USER_DIR21.."/file3.txt","file3 test")
readfile(USER_DIR21.."/file3.txt")
writevalw(USER_DIR21.."/file3.txt","file3 test2")
deletefile(USER_DIR21.."/file3.txt")
readfile(USER_DIR21.."/file3.txt")
end
end
end
local function file1test()
readfile("/file1.txt")
writevala("/file1.txt","file1 test")
readfile("/file1.txt")
writevalw("/file1.txt","file1 test2")
deletefile("/file1.txt")
readfile("/file1.txt")
end
local function file3test()
readfile("/file3.txt")
writevala("/file3.txt","file3 test")
readfile("/file3.txt")
writevalw("/file3.txt","file3 test2")
deletefile("/file3.txt")
readfile("/file3.txt")
end
local function file4test()
readfile("/file4.txt")
writevala("/file4.txt","file4 test")
readfile("/file4.txt")
writevalw("/file4.txt","file4 test2")
deletefile("/file4.txt")
readfile("/file4.txt")
end
local function dir3test()
if rtos.make_dir(USER_DIR3) then
print("MAKE DIR3 SUCC")
else
print("MAKE DIR3 FAIL")
end
end
local cnt,tick1,tick2,tick3,size,size1,perc = 0
local str512 = "12345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghkkll111122222ffssssss33334444455566666777812345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghkkll111122222ffssssss33334444455566666777812345678901234567890123456789012345678901234567890123456789A012345678901234567890abcdefghkkll111122222ffssssss33334444455566666777812345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghkkll111122222ffssssss333344444555666667778"
local str = str512..str512..str512..str512
size1 = rtos.get_fs_free_size()
local function test()
size = rtos.get_fs_free_size()
--perc = cnt*2*100/962
perc = size*100/size1
print("get_fs_free_size: "..size.." Bytes",size1,perc)
if rt then
cnt = cnt + 1
end
print("cnt: ",cnt)
tick1 = rtos.tick()
readfile("/file1.txt")
tick2 = rtos.tick()
print("readfile perc tick",perc,tick2 - tick1)
writevala("/file"..cnt..".txt",str)
tick3 = rtos.tick()
print("writevala perc tick",perc,tick3 - tick2)
if perc == 50 then
tick1 = rtos.tick()
for i = 1,10 do
readfile("/file1.txt")
end
tick2 = rtos.tick()
print("50% readfile",tick2 - tick1)
for i = 1,10 do
writevalw("/file1.txt",str)
end
tick3 = rtos.tick()
print("50% writevalw",tick3 - tick2)
end
end
sys.timerLoopStart(test,1000)
5.6 testFs4useratio.lua 代码
这个脚本用于反复创建多文件,并且打印系统的剩余空间。
--- 模块功能:文件操作功能测试.
-- @author openLuat
-- @module fs.testFs
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.27
module(...,package.seeall)
local USER_DIR1,USER_DIR11 = "/dir1","/dir11"
local USER_DIR2,USER_DIR21,USER_DIR211 = "/dir2","/dir21","/dir211"
local USER_DIR3 = "/dir3"
--[[该demo提供四种接口,第一种readfile(filename)读文件,第二种writevala(filename,value),写文件内容,附加模式,
第三种function writevalw(filename,value),写文件内容,覆盖模式,第四种deletefile(filename),删除文件。--]]
--[[
函数名:readfile(filename)
功能:打开所输入文件名的文件,并输出储存在里面额内容
参数:文件名
返回值:无 ]]
local function readfile(filename)--打开指定文件并输出内容
local filehandle=io.open(filename,"r")--第一个参数是文件名,第二个是打开方式,'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then --判断文件是否存在
local fileval=filehandle:read("*all")--读出文件内容
if fileval then
print(filename) --如果文件存在,打印文件内容
filehandle:close()--关闭文件
else
print("The file is empty")--文件不存在
end
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
local rt = true
--[[
函数名: writevala(filename,value)
功能:向输入的文件中添加内容,内容附加在原文件内容之后
参数:第一个文件名,第二个需要添加的内容
返回值:无 --]]
local function writevala(filename,value)--在指定文件中添加内容,函数名最后一位就是打开的模式
local filehandle = io.open(filename,"a+")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
rt = filehandle:write(value)--写入要写入的内容
print("write rt",rt)
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[
函数名:writevalw(filename,value)
功能:向输入文件中添加内容,新添加的内容会覆盖掉原文件中的内容
参数:同上
返回值:无 --]]
local function writevalw(filename,value)--在指定文件中添加内容
local filehandle = io.open(filename,"w")--第一个参数是文件名,后一个是打开模式'r'读模式,'w'写模式,对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
if filehandle then
filehandle:write(value)--写入要写入的内容
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--[[函数名:deletefile(filename)
功能:删除指定文件中的所有内容
参数:文件名
返回值:无 --]]
local function deletefile(filename)--删除指定文件夹中的所有内容
local filehandle = io.open(filename,"w")
if filehandle then
filehandle:write()--写入空的内容
print("successfully delete")
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
--打印文件系统的剩余空间
print("get_fs_free_size: "..rtos.get_fs_free_size().." Bytes")
--成功创建一个目录(目录已存在,也返回true表示创建成功)
local function dir1test()
if rtos.make_dir(USER_DIR1) then
if rtos.make_dir(USER_DIR11) then
readfile(USER_DIR11.."/file11.txt")
writevala(USER_DIR11.."/file11.txt","file11 test")
readfile(USER_DIR11.."/file11.txt")
writevalw(USER_DIR11.."/file11.txt","file11 test2")
--deletefile(USER_DIR11.."/file11.txt")
readfile(USER_DIR11.."/file11.txt")
readfile(USER_DIR11.."/file12.txt")
writevala(USER_DIR11.."/file12.txt","file11 test")
readfile(USER_DIR11.."/file12.txt")
writevalw(USER_DIR11.."/file12.txt","file11 test2")
--deletefile(USER_DIR11.."/file12.txt")
readfile(USER_DIR11.."/file12.txt")
end
end
end
local function dir2test()
if rtos.make_dir(USER_DIR2) then
if rtos.make_dir(USER_DIR21) then
rtos.make_dir(USER_DIR211)
readfile(USER_DIR21.."/file21.txt")
writevala(USER_DIR21.."/file21.txt","file21 test")
readfile(USER_DIR21.."/file21.txt")
writevalw(USER_DIR21.."/file21.txt","file21 test2")
--deletefile(USER_DIR21.."/file21.txt")
readfile(USER_DIR21.."/file21.txt")
readfile(USER_DIR21.."/file3.txt")
writevala(USER_DIR21.."/file3.txt","file3 test")
readfile(USER_DIR21.."/file3.txt")
writevalw(USER_DIR21.."/file3.txt","file3 test2")
--deletefile(USER_DIR21.."/file3.txt")
readfile(USER_DIR21.."/file3.txt")
end
end
end
local function file1test()
readfile("/file1.txt")
writevala("/file1.txt","file1 test")
readfile("/file1.txt")
writevalw("/file1.txt","file1 test2")
--deletefile("/file1.txt")
readfile("/file1.txt")
end
local function file3test()
readfile("/file3.txt")
writevala("/file3.txt","file3 test")
readfile("/file3.txt")
writevalw("/file3.txt","file3 test2")
--deletefile("/file3.txt")
readfile("/file3.txt")
end
local function file4test()
readfile("/file4.txt")
writevala("/file4.txt","file4 test")
readfile("/file4.txt")
writevalw("/file4.txt","file4 test2")
--deletefile("/file4.txt")
readfile("/file4.txt")
end
local function dir3test()
if rtos.make_dir(USER_DIR3) then
print("MAKE DIR3 SUCC")
else
print("MAKE DIR3 FAIL")
end
end
local cnt = 0
local str512 = "12345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghkkll111122222ffssssss33334444455566666777812345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghkkll111122222ffssssss33334444455566666777812345678901234567890123456789012345678901234567890123456789A012345678901234567890abcdefghkkll111122222ffssssss33334444455566666777812345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghkkll111122222ffssssss333344444555666667778"
local str = str512..str512
local function filewtest()
if rt then
cnt = cnt + 1
end
print("get_fs_free_size: cnt"..rtos.get_fs_free_size().." Bytes",cnt)
writevala("/file1.txt",str)
end
local function emptyfile(filename)
local filehandle = io.open(filename,"w")
if filehandle then
print("successfully empty")
filehandle:close()
else
print("文件不存在或文件输入格式不正确") --打开失败
end
end
local function filemptest()
cnt = cnt + 1
print("get_fs_free_size: cnt"..rtos.get_fs_free_size().." Bytes",cnt)
emptyfile("/file"..cnt..".txt")
end
local function makedir(dir)
if rtos.make_dir(dir) then
print("makedir suc")
else
print("makedir fail")
end
end
local function makedirtest()
cnt = cnt + 1
print("get_fs_free_size: cnt"..rtos.get_fs_free_size().." Bytes",cnt)
makedir("/dir"..cnt)
end
local str10 = str..str..str..str..str..str..str..str..str..str
local function filew10ktest()
if rt then
cnt = cnt + 1
end
print("get_fs_free_size: cnt"..rtos.get_fs_free_size().." Bytes",cnt)
writevala("/file"..cnt..".txt",str10)
end
local str100 = str10..str10..str10..str10..str10..str10..str10..str10..str10..str10
local function filew100ktest()
if rt then
cnt = cnt + 1
end
print("get_fs_free_size: cnt"..rtos.get_fs_free_size().." Bytes",cnt)
writevala("/file"..cnt..".txt",str100)
end
local function test()
--filewtest()
filemptest()
--makedirtest()
--filew10ktest()
--filew100ktest()
end
sys.timerLoopStart(test,1000)
六、开机调试
6.1 开发板开机
连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。
6.2 功能调试
首先新建一个文件夹 dir11,在文件夹中新建文件 file11.txt,在 file11.txt 文件中追加数据后保存。查看文件的信息,然后删除整个文件。
获取文件系统的空闲空间和总空间,并计算空闲空间百分比。
测量文件读取和写入操作的时间,执行额外的读写操作并测量其性能。
获取文件系统的空闲空间和总空间,并且不断的新建文件,测试系统的速度和存储响应时间。
七、常见问题
7.1 不同的 core 固件分配的文件系统空间不尽相同
可以参考:https://docs.openluat.com/air724ug/luatos/firmware/ 底层固件功能列表。
可通过 rtos.get_fs_free_size()返回文件系统的剩余空间,单位为字节。
7.2 为什么读文件失败
- 如果读取的是本地烧录的文件,检查下文件有没有烧录以及路径是否正确。Luatools烧录的文件,访问路径是/ldata/xxx.yyy,例如烧录了 1.txt,访问路径应该是/ldata/1.txt。
- 如果读取的是程序运行过程中动态创建的文件,检查下文件是否创建成功【文件系统空间不足可能会导致文件创建失败】以及完整路径是否正确。
给读者的话
本篇文章由
杨超
开发;本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;
请登录合宙技术交流论坛,点击文档找错赢奖金-Air724UG-LuatOS-软件指南-常用功能实现-文件系统(io);
用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;
我们会迅速核实并且修改文档;
同时也会为您累计找错积分,您还可能赢取月度找错奖金!