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)


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)



