Пожалуйста, не мог бы кто-нибудь помочь мне закончить мою функцию, которая может сортировать все имена файлов, которые я извлек через файловую систему Lua, поскольку я не могу этого сделать? Код ниже. (Любая помощь будет оценена)
local lfs = require "lfs"
local json = require("json")
local tt = {}
function browseFolder(root)
for entity in lfs.dir(root) do
if entity~ = "." and entity~ = ".." then
local fullPath=root..'/'..entity
local mode=lfs.attributes(fullPath,"mode")
if mode= = "file" and entity: match "%.mkv$" then
table.insert(tt, {
filename = entity,
folder = root})
elseif mode= = "directory" then
browseFolder(fullPath);
end
end
end
end
browseFolder(".")
--print(tt)
table.sort(tt, function(a, b) return a:filename() < b:filename() end)
for k,d in ipairs(tt) do
--print(d.filename)
print(k, d.filename, d.folder)
--end
end
И... если кто-нибудь знает способ выполнить другую функцию, которая также включает дополнительные атрибуты файла, такие как размер файла, дата создания и т. д. А затем иметь возможность сортировать по любому из них, это было бы здорово.
используйте lfs.attributes
и полный путь для доступа к файлу:
local lfs = require "lfs"
local json = require("json")
local tt = {}
function browseFolder(root)
for entity in lfs.dir(root) do
if entity~ = "." and entity~ = ".." then
local fullPath=root..'/'..entity
local mode=lfs.attributes(fullPath,"mode")
if mode= = "file" and entity: match "%.*$" then -- all files
table.insert(tt, {
filename = entity,
folder = root,
date_ch = lfs.attributes(root .. '//'.. entity, "change")
})
print(entity,root)
elseif mode= = "directory" then
browseFolder(fullPath);
end
end
end
end
browseFolder(".")
table.sort(tt, function(a, b) return a.date_ch < b.date_ch end) -- sort by date of change
for k,d in pairs(tt) do
print(k, d.filename, os.date("%c",d.date_ch) , d.folder)
end
и вместо a:filename() < b:filename()
используйте a.filename < b.filename