FS(文件系统操作)

# 简介 模块具有64Mb的flash空间,除了模块自身程序占用以外还剩余了一部分空间可供用户使用,AT和LuatOS-Air均支持进行操作。 ## API说明 LuatOS-Air的文件操作来自标准lua的io库直接按照标准语法使用即可, 除了标准语法,LuatOS-Air提供了几个更方便的文件操作接口可以使用。 |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章节](https://doc.openluat.com/wiki/21?wiki_page_id=2248) [rtos API章节](https://doc.openluat.com/wiki/21?wiki_page_id=2247#rtosmake_dir_311 "rtos API章节") # 实现流程 1. 通过rtos.make_dir()接口创建文件目录 2. 通过io.writeFile()接口写文件内容 3. 通过io.exists()接口判断文件是否存在 4. 文件存在的情况通过调用如下接口获取相应内容 io.readFile()读取文件内容 io.fileSize()接口读取文件长度 io.pathInfo()接口读取文件信息 io.readStream()接口读取指定位置字符串 # 示例 1. 创建目录 ```lua local USER_DIR_PATH = "/user_dir" rtos.make_dir(USER_DIR_PATH) ``` 2. 写文件内容,文件不存在的情况,会创建文件 ```lua io.writeFile(USER_DIR_PATH.."/test.txt","0123456789") ``` 3. 判断文件是否存在 ```lua io.exists(USER_DIR_PATH.."/test.txt") ``` 4. 读取文件内容 ```lua local fileval = io.readFile(USER_DIR_PATH.."/test.txt") ``` 5. 读取文件长度 ```lua local filelen = io.fileSize(USER_DIR_PATH.."/test.txt") ``` 6. 读取文件信息 ```lua local fileinfo = io.pathInfo(USER_DIR_PATH.."/test.txt") ``` 7. 读取指定位置字符串 ```lua local fileStr = io.readStream(USER_DIR_PATH.."/test.txt", 3, 5) ``` 8. 删除文件 ``` os.remove(USER_DIR_PATH.."/test.txt") ``` # 常见问题 1. 不同的core固件分配的文件系统空间不尽相同,可通过rtos.get_fs_free_size()返回文件系统的剩余空间,单位为字节。 2. 为什么读文件失败 - 如果读取的是本地烧录的文件,检查下文件有没有烧录以及完整路径是否正确 - 如果读取的是程序运行过程中动态创建的文件,检查下文件是否创建成功【文件系统空间不足可能会导致文件创建失败】以及完整路径是否正确 3. 打开一个6000字节的txt文件需要占用多少内存 ? 需要占用18k的内存 测试demo:[testfs.zip](https://cdn.openluat-luatcommunity.openluat.com/attachment/20210715202810186_testfs.zip) ![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210715202933515_企业微信截图_16263509841781.png "undefined") ![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210715202952003_企业微信截图_16263507873705.png "undefined") 4. luatools烧录本地的文件在那个目录? luatools烧录本地的文件在/lua这个目录下 例子:在luatools烧录1.txt文件后读取文件路径如下 ``` io.readFile("/lua/1.txt") ``` 5. luatools烧录本地的文件可以读写吗? 可以读,但是不可写 6. 可以在/lua下创建文件吗? /lua 用来访问“Luatools烧录的Lua脚本以及图片、音频等文件”的一个特殊目录,并不是文件系统中真实存在的目录;在文件系统中创建文件时,不要放在/lua这个目录下,可能会出现意想不到的错误 7. 为什么用os.remove()删除不了文件? 检查文件是否关闭,已经打开的文件不能删除,必须要先关闭才能删除 8. 空中升级自己创建的文件会被删除吗? 不会,会保留 空中升级参考:[updata(空中升级)](https://doc.openluat.com/wiki/21?wiki_page_id=2314 "updata") 测试demo:[testfs.zip](https://cdn.openluat-luatcommunity.openluat.com/attachment/20210728145042122_testfs.zip) ![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210728150131379_企业微信截图_16274551097610.png "undefined") ![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210728150144405_企业微信截图_16274552997508.png "undefined") ![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210728150208793_企业微信截图_16274555334575.png "undefined") ![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20210728150221049_企业微信截图_1627455610282.png "undefined")