尝试使用Lua循环遍历目录以列出所有文件
2018-3-21 0:16:52
收藏:0
阅读:137
评论:1
我是Lua的新手,尝试理解和整合代码,希望得到一些帮助。 我查看了关于Lua文件循环的现有文章,但无法获得所需的输出结果。
问题 - 我有一个带有文件的文件夹,文件夹路径 - "D:\Test_Files\Outbound\Client\final"。
文件夹中的文件扩展名为 - .txt
尝试:
获取此文件夹中的文件数(在本例中为"final"文件夹)。
读取每个文件,构建类似于此的循环:
list = {} for i=0,(#Totalfilecount) do local fr = io.open('D:\Test_Files\Outbound\Client\final\'..filename.,'rb') local f = fr.read('*.txt') Customfunction(f) -- 将文件内容传递给Customfunction以应用业务逻辑。 end
问题:
- 如何从目录中获取文件计数?
- 如何读取目录以检查是否存在带有"*.txt"的文件?
- 如何使用表列表存储每个文件名并通过循环读取?
- 如何通过循环读取每个文件并将值传递给函数 "Customfunction(f)"?
代码预计在Windows上运行。请在不使用外部文件系统函数(例如“lfs”)的情况下以纯Lua分享建议,因为我们不想导入外部函数。
任何建议/帮助都将不胜感激!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你不能(至少不应该)在不扩展 Lua 的情况下做到这一点。为了实现这一点,你必须下载 LuaFileSystem 库。你可以使用 LuaRocks 来完成:
$ luarocks install luafilesystem使用库的方式如下:
require "lfs" function dirtree(dir) assert(dir and dir ~= "", "Please pass directory parameter") if string.sub(dir, -1) == "/" then dir=string.sub(dir, 1, -2) end local function yieldtree(dir) for entry in lfs.dir(dir) do if entry ~= "." and entry ~= ".." then entry=dir.."/"..entry local attr=lfs.attributes(entry) coroutine.yield(entry,attr) if attr.mode == "directory" then yieldtree(entry) end end end end return coroutine.wrap(function() yieldtree(dir) end) end上面的代码可用于如下的示例:
for filename, attr in dirtree("D:\Test_Files\Outbound\Client\final") do print(attr.mode, filename) end你需要检查文件扩展名是否等于 txt。使用下面的代码片段可以读取文件扩展名:
function GetFileExtension(path) return path:match("^.+(%..+)$") end因此,回答你的问题,你只需要计算在 dirtree 函数返回的数组中的元素数量,即可知道目录中有多少个文件。回答第二个问题,只需要使用帖子中的代码即可。你想要的表格由 dirtree() 返回,但你可能只想从其中提取 .txt 文件。阅读文件,只需要查看其他 SO 回答。你已经得到所需的名称(在数组中),所以使用它。
编辑:你可以解析
dir和ls命令的结果来获取目录列表,但不应该这样做。虽然这样不需要安装任何库,但是你的代码将会在不同的操作系统上表现不同。向你的代码添加库并不是什么坏事。hack 事情更糟糕。
(不确定提取文件扩展名的函数是否有效。我没有制作本帖中使用的 dirtree 代码,它属于 David Kastrup)