我试图获取保存在两个文件夹中的所有文件的名称,名称保存为:
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
正如我所说,函数提供了需要返回值但不是正确的算术顺序。
知道我在这里做错了什么吗?
答案 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