Lua遍历指定目录获取TXT文件数量并读取文件求助
Lua文件遍历与读取解决方案
Hey there! Let's work through your Lua file handling task together—since you're new to the language, I'll break this down clearly for you.
1. 获取指定文件夹内的.txt文件总数并遍历读取
Lua的标准库没有直接提供目录遍历的函数,但在Windows环境下,我们可以借助系统命令来获取文件列表,再完成后续的读取操作。这里是针对你指定路径D:\Test_Files\Outbound\Client\final的完整实现:
local targetDir = [[D:\Test_Files\Outbound\Client\final]] local fileList = {} -- 借助Windows的dir命令筛选出所有.txt文件 local cmd = string.format('dir /b /a-d "%s\\*.txt"', targetDir) local handle = io.popen(cmd) -- 读取命令输出,把文件名存入列表 for fileName in handle:lines() do table.insert(fileList, fileName) end handle:close() -- 获取文件总数 local totalFiles = #fileList print("Total .txt files in folder:", totalFiles) -- 遍历每个文件并读取内容,构建你需要的list结构 local list = {} -- 如果你习惯从0开始索引,把循环起始值改成0即可 for i = 1, totalFiles do local fullPath = string.format("%s\\%s", targetDir, fileList[i]) local file = io.open(fullPath, "r") if file then -- 读取整个文件内容,也可以按行读取(用file:lines()) local content = file:read("*a") table.insert(list, { index = i, filename = fileList[i], content = content }) file:close() else print("Oops, failed to open file:", fullPath) end end -- 可选:测试输出list的内容(只显示前100字符预览) for _, item in ipairs(list) do print("\n--- File:", item.filename, "---") print("Content preview:", string.sub(item.content, 1, 100)) end
关键细节解释
- 路径处理:用双括号
[[ ]]包裹Windows路径,能避免\转义的麻烦,写起来更省心。 dir命令参数:/b让命令只输出纯文件名,/a-d表示只保留文件、排除文件夹,精准筛选我们要的.txt文件。- 文件读取:
io.open打开文件后,记得用file:close()关闭句柄,避免资源泄漏;read("*a")会一次性读取整个文件内容,如果需要逐行处理,换成for line in file:lines() do ... end即可。 - 循环索引:Lua的表默认从1开始索引,如果你一定要用
i=0开头的循环,只需要把循环起始值改成0,同时调整list的插入逻辑就行。
可选:跨平台方案(用第三方库)
如果你的Lua环境支持第三方库,推荐用LuaFileSystem(lfs),它是跨平台的目录处理工具,更优雅:
local lfs = require "lfs" local targetDir = [[D:\Test_Files\Outbound\Client\final]] local fileList = {} for entry in lfs.dir(targetDir) do local attr = lfs.attributes(targetDir.."\\"..entry) -- 筛选文件且后缀为.txt if attr and attr.mode == "file" and string.match(entry, "%.txt$") then table.insert(fileList, entry) end end -- 后续的文件总数统计、内容读取逻辑和上面一致
不过需要先通过LuaRocks安装库:luarocks install luafilesystem
希望这个方案能帮你搞定需求,有任何细节疑问随时提!
内容的提问来源于stack exchange,提问作者Ravin




