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

时间:2019-04-08 19:13:37

标签: lua luafilesystem

在LuaFileSystem中,lfs.dir(<path>)以字符串形式遍历目录的内容。如果我想打印目录内容的属性,则可以这样做(使用inspect.lua来打印人类可读的表表示形式):

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

但是,迭代器的前两个字符串似乎始终是'.''..'(当前目录和先前目录的外壳符号)。 这会导致我的代码出错,因为<path> .. '/' .. '.'从来都不是文件或目录。

在循环之前,我已经通过将状态提前两次来跳过这些操作。

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

优点是,我不必为每次迭代都明确检查字符串是'.'还是'..'。一个缺点是可读性下降。 会不会有前两个字符串不同的情况?

1 个答案:

答案 0 :(得分:1)

您可以对此进行明确说明:

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