使用LuaFileSystem dir迭代器跳过当前目录和上一个目录

在LuaFileSystem中,lfs.dir(<path>)作为字符串遍历目录的内容。如果我想要打印目录内容的属性,可能会像这样操作(使用inspect.lua打印人类可读的表格表示):

for name in lfs.dir(<path>)do
   local path = <path> .. '/' .. name
   inspect(lfs.attributes(path))
end

然而,迭代器中的前两个字符串似乎总是 '.''..' (当前目录和上一个目录的shell表示法)。 这会导致我的代码出现错误,因为 <path> .. '/' .. '.' 永远不是文件或目录。

我已经开始在循环之前将状态向前推进两次来跳过它们。

local it, state = lfs.dir(path)
state:next()
state:next()
for file_name,_ in it,state,nil do
    -- 一些操作
end

优点是我不必明确检查每次迭代时字符串是否为'.''..'。 缺点是可读性降低。 是否存在前两个字符串不同的情况?

点赞
用户7552
用户7552

你可以直接明确它:

for name in lfs.dir(<path>) do
    if name ~= '.' and name ~= '..' then
        local path = <path> .. '/' .. name
        inspect(lfs.attributes(path))
    end
end
2019-04-08 19:48:20