我正在一個不支持lua文件系統庫的系統上工作。所以我必須做我自己的目錄迭代器,給出我具有特定格式完整路徑的文件列表。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循環。如果表項是目錄,則它調用SetDIR以獲取該目錄中的文件列表。
我知道我的做法是錯誤的,使這項工作任何明智的想法將不勝感激。
檢查過剩 「或」 串 「如果string.find(V」 %$ MKV 「)或string.find(V」 %$ MP4 「)或則」 –
哦,這是一個錯字原來的代碼沒有這個。 –
函數CheckDirectory() - 不帶參數的無限次呼叫 –