【发布时间】:2017-03-02 10:11:06
【问题描述】:
我正在使用不支持 lua 文件系统库的系统。所以我必须制作我自己的目录迭代器,它给了我具有特定格式的完整路径的文件列表。
系统有一个API,我们可以设置目录路径和另一个API,以获取该目录中lua表格式的文件列表。
API:FileSetDir() 设置目录以获取文件列表。 API:FileList() 给出了我们使用 API:FileSetDir() 设置的目录中的文件列表。
例如考虑以下目录结构。
Movies/3d Movies/Avatar/Avatar.mp4
Movies/3d Movies/Avengers/Avengers.mkv
Movies/3d Movies/ironman.mp4
Movies/Horor/Ring/Ring.avi
Movies/Horor/A Nightmare On Elm Street/A Nightmare On Elm Street.iso
Movies/Barfi.mkv
我的代码..
RootDirList1 = {}
RootDirList = {}
finalpath={}
function SetDIR(v)
if v=="" then
RootDir = '/mnt/media/net/192.168.1.40_usbshare1/Movies/'
else
RootDir = '/mnt/media/net/192.168.1.40_usbshare1/Movies/'..v
end
API:FileSetDir (RootDir)
RootDirList1 = API:FileList ()
CheckDirectory()
end
function CheckDirectory()
for i,v in pairs(RootDirList1) do
local RootDir = '/mnt/media/net/192.168.1.40_usbshare1/Movies/'..v
API:FileSetDir (RootDir)
local RootDirList = API:FileList ()
if RootDirList == nil then
print(v)
print("Not Directory")
if string.find(v,"%.mkv$") or string.find(v,"%.mp4$") then
finalpath[#finalpath+1] =RootDir.."/"..t
print(RootDir.."/"..t)
end
else
CheckDirectory(v)
end
end
end
SetDIR("")
代码给了我“堆栈溢出”的错误。
SetDIR 使用 API:FileSetDir(RootDir) 设置目录并获取 RootDirList1 表中的文件列表。然后我在这里调用函数 CheckDirectory() 如果表条目是文件,我将在 RootDirList1 表上运行 for 循环,它将存储到 finalpath 表中。如果表项是目录,那么它调用 SetDIR 来获取该目录中的文件列表。
我知道我的方法是错误的,因此任何聪明的想法都将不胜感激。
【问题讨论】:
-
检查字符串中多余的“或” if string.find(v,"%.mkv$") or string.find(v,"%.mp4$") or then"
-
哦,这是一个错字,原来的代码没有这个。
-
函数 CheckDirectory() - 无参数的无休止调用
-
好的 注意到了。我正在尝试更动态地实现它。就像它第一次运行时获取主目录列表,然后遍历主列表中的每个目录,直到找到所有文件。
-
CheckDirectory(v)是什么意思?CheckDirectory没有参数!
标签: list lua iterator directory lua-table