#lua
#lua
Вопрос:
Пожалуйста, кто-нибудь может помочь мне завершить мою функцию, которая может сортировать все имена файлов, которые я извлек через файловую систему 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
И… если кто-нибудь знает способ выполнить другую функцию, которая также включает дополнительные атрибуты файла, такие как размер файла, дата создания и т. Д. А затем иметь возможность сортировать по любому из них, это было бы здорово.
Ответ №1:
используйте 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