一、io.popen 函数获取
io.popen
是 Lua 中的一个函数,它允许你执行一个外部命令并将命令的输出作为流处理。如果你想在 Lua 中通过 io.popen
执行 dir
命令(linux 命令是ls )来获取指定文件夹下的所有文件及其路径,你可以构造一个适用于 Windows 环境下的 dir
命令,并通过 io.popen
执行这个命令。
Lua
-- 在 Lua 中调用 dir 命令并获取输出
local handle = io.popen('dir /b /s "C:\\path\\to\\your\\folder\\"')
local files = {}
for file in handle:lines() do
files[#files + 1] = file
end
handle:close()
-- 现在 'files' 数组包含了文件夹下所有文件的完整路径
这里的 /b
参数表示简洁格式(只显示文件名),而 /s
表示包括所有子目录的内容。请注意,你需要将 "C:\\path\\to\\your\\folder\\"
替换为你要查找的实际文件夹路径。
如果你是在非 Windows 系统下,比如 Unix/Linux 系统,那么应使用 ls
或 find
命令代替 dir
:
Lua
-- 在 Unix/Linux 系统中获取文件夹及其子文件夹下的所有文件
local handle = io.popen('find "path/to/your/folder/" -type f')
-- ... 同样的处理逻辑 ...
在这个例子中,find
命令用于查找指定目录及其子目录下所有的普通文件 (-type f
)。
二、使用lfs
(LuaFileSystem)库来获取
Lua
local lfs = require "lfs"
function listFolders(path)
local folders = {}
local attr = lfs.attributes(path)
if attr.mode == "directory" then
table.insert(folders, path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'/'..file
local attr = lfs.attributes(f)
if attr.mode == "directory" then
listFolders(f)
end
end
end
end
return folders
end
-- 使用示例
local path = "/your/specified/path"
local folders = listFolders(path)
for _, folder in ipairs(folders) do
print(folder)
end
确保你已经安装了lfs
库,如果没有安装,你可以通过LuaRocks来安装它
Lua
luarocks install luafilesystem
这段代码会打印出指定路径下所有的文件夹路径。如果你只想获取直接子文件夹,可以在listFolders
函数中去掉对lfs.dir
的递归调用。