LUA 支持读写 SD 卡 / U 盘 / 内部 Flash 文件:目录列举、打开、读、写、定位、关文件。适合配方文件、数据导出、日志落地。
1. 路径与盘符
| 系列 | SD卡 | U盘 | 内部Flash |
|---|---|---|---|
| M 系列 | 1: | 2: | 3: |
| DH 系列 | /sdcard | /udisk | /data |

2. API
| 函数 | 说明 |
|---|---|
| list_dir(path) | 列举目录,结果通过 on_list_dir 逐条回调 |
| on_list_dir(path, filename, type, fsize) | 回调:type 0=文件夹/1=文件,fsize 文件大小 |
| file_open(path, mode) | 打开文件:mode 0=FA_READ(读)/1=FA_WRITE(覆盖写)/2=FA_WRITE_ADD(追加) |
| file_close() | 关闭当前文件 |
| file_size() | 当前文件字节数 |
| file_seek(offset) | 定位读写位置 |
| file_read(count) | 读 count 字节(1~2048),返回下标从 1 的字节表 |
| file_write(data) | 写数据 |
3. 案例:SD 卡目录列表
function on_init()
list_dir("1:/music") -- 列SD卡music目录
end
function on_list_dir(path, filename, type, fsize)
if type == 1 then -- 文件
print(path .. filename .. " " .. fsize .. "B")
end
end
4. 案例:读文件(流式处理)
function read_file_ok()
file_open("1:/data/recipe.txt", 0) -- 读模式
local remain = file_size()
local line = ""
while remain > 0 do
local n = (remain > 64) and 64 or remain
local buf = file_read(n) -- 每次最多2048, 建议小块
-- 处理 buf...
remain = remain - n
end
file_close()
end

文件 IO 最容易踩内存溢出的坑:严禁全局累计大缓冲——每次 file_read 后立即解析释放,必须流式处理,否则内存溢出触发看门狗复位。写 SD 卡注意文件已存在时 mode=2 追加、mode=1 覆盖。
整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「文件IO」,版权归大彩科技所有。
发表回复