使用lua扫描文件夹

时间:2014-12-15 10:47:05

标签: lua

我试图获取保存在两个文件夹中的所有文件的名称,名称保存为:

1.lua  2.lua  3.lua 4.lua and so on 

文件夹名称为:

 first folder :   "/const/" 
 second folder:   "/virt/"

我尝试做的只是获取文件的数量而且这种方法有效,但顺序不正确,当我得到17文件时,例如我从函数中获得了第17个文件在15之前,这对我来说是一个问题,我在这里使用的函数代码:

local virt_path = "/virt/"
local const_path = "/const"
local fs = require "lfs"

local const = {}

for num = 1, (numberoffile)do   -- numberoffile is predfined and can't be change 
    const[num] = assert(
        dofile (const_path .. mkfilename(num)),
        "Failed to load constant  ".. num ..".")
end

local function file_number()  --this is the function that causes me a headach
    local ci, co, num = ipairs(const)
    local vi, vo, _   = fs.dir(virt_path)
    local function vix(o)
        local file = vi(o)
        if file == nil then return nil end
        local number = file:match("^(%d+).lua$")
        if number == nil then return vix(o) end
        return tonumber(number)
    end
    local function iter(o, num)
        return ci(o.co, num) or vix(o.vo, num)
    end
    return iter, {co=co, vo=vo}, num
end

正如我所说,函数提供了需要返回值但不是正确的算术顺序。

知道我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:2)

我使用我的path [1]库。

1我们用文件名填充表格

local t = {}
for f in path.each("./*.lua", "n") do
  t[#t + 1] = tonumber((path.splitext(f)))
end

table.sort(t)

for _, i in ipairs(t) do
  -- do work
end

2我们检查文件是否存在

for i = 1, math.huge do
  local p = "./" .. i .. ".lua"
  if not path.exists(p) then break end
  -- do work
end

[1] https://github.com/moteus/lua-path