讓Lua自己把資料夾下面的所有檔案自動載入起來吧

2022-01-29 15:15:30 字數 3243 閱讀 9681

沒有想到我也做了一回標題黨。其實這裡邊說的自動還是有誇大其詞的部分。其實只是指定資料夾,然後根據指定資料夾資料,載入目錄下邊的內容而已。

怎麼來進行lua檔案的載入

一般情況下,相關的功能需要給他建立乙個相關的目錄,然後直接通過我寫的乙個元件指定這個目錄的載入位置就行了。不同的目錄之間需要明確他們的載入順序。

為什麼要這麼做?

載入的條理性。一般情況下,lua檔案會在需要的時候進行記憶體載入,這樣比較混亂。說比較混亂的原因是沒有明確的地方來控制載入的順序,所以檔案載入的順序比較看臉。

載入內容的安全性。這裡提到的安全性並不是說的什麼高深的東西。而是這個東西究竟有沒有載入成功。如果使用了,我所說的載入方式進行載入,檔案內容載入只要存在相關的資料夾中就會自動載入,一般不會漏下。

明確同乙個資料夾下的檔案載入順序。一般情況下init.lua會首先載入,然後載入其他檔案。最後載入loadend.lua檔案。在編寫軟體的時候可以根據這些檔案的加載入順序來進行內容載入的順序控制。

實現位置的無關性。配合工廠模式,可以在完全不關心實現位置的情況下,實現相關功能。

檔案位置的條理性。具體的實現位置可以在不記位置的情況下推理出他應該在什麼地方實現。(個人覺得這個非常重要)

實際引用

總結

其實是乙個非常簡單的功能,但是用處卻非常大。可能我不是很會總結這個東西。哈哈。總之分享一下吧

檔案

--

local lfs = require("lfs")

local autorequire = class("

autorequire")

local instance = nil

function

autorequire:getinstance()

return

instance

endfunction

autorequire:init(dir)

instance.originalpath = dir or

lfs.currentdir()

print("

instance.originalpath

", instance.originalpath)

endfunction

autorequire:gettag()

return self._tag

endfunction

autorequire:getrequirepath()

return self._require_path

endfunction autorequire:require

(path, data)

local loadpath = self.originalpath..'/'

..path

assert(lfs.symlinkattributes(loadpath), "

error autorequire path not find

"..path)

lfs.chdir(loadpath)

self.

_tag =data

self.

_require_path =path

local initfile = path..'

/'.."

init.lua

"if cc.fileutils:getinstance():isfileexist(initfile) then

--print("require("..initfile..")")

local loadf = path..'

/'.."

init"--

print("require "..loadf)

require

(loadf)

endfor file in lfs.dir(loadpath) do

if file ~= "."

and file ~= ".."

and file ~= "

init.lua

"and file ~= "

loadend.lua

"then

local f = loadpath ..'/'

..file

local attr =lfs.attributes(f)

local filename = string.gsub(file, "

.lua$

", ""

)

if attr.mode == "

file

"and file ~= filename then

--print("require("..path..'/'..file..")")

local loadf = path..'/'

..filename

--print("require "..loadf)

require

(loadf)

endend

endlocal initfile = path..'

/'.."

loadend.lua

"if cc.fileutils:getinstance():isfileexist(initfile) then

--print("require("..initfile..")")

local loadf = path..'

/'.."

loadend"--

print("require "..loadf)

require

(loadf)

endself.

_tag = nil

self.

_require_path = nil

lfs.chdir(self.originalpath)

endinstance =autorequire.new()

cc.exports.autorequire =autorequire

return autorequire

2016-09-30 11:36:10 後記

突然間想起來乙個好處,現在補充上來。

一次性載入所有的**。可以讓很多語法錯誤在啟動階段暴露出來,而不是在真正的執行階段暴露,這樣比較方便。

C 讀取某個資料夾下面的子資料夾及其所有檔案

下面是輸出當前目錄下的所有資料夾以及檔案的絕對路徑 當然也可以是相對路徑,由輸入的路徑決定 下面的函式介面可以改裝為單輸出檔案或者資料夾的介面,這是乙個大方面的總介面。include include include include include using namespace std void g...

C 指定資料夾下面的所有內容複製到目標資料夾下面

在涉及到資料夾操作的過程中,有時候需要將資料夾下的所有內容複製拷貝到另乙個資料夾,在c 的開發中有時候會遇到這個功能需求將指定資料夾下所有的內容複製到另乙個資料夾,這個過程需要遍歷所有的檔案和目錄。此過程中還涉及到使用directory.createdirectory方法建立資料夾,file.cop...

python遍歷指定資料夾下面的檔案名字

在我們做深度學習的資料處理的時候,需要用到資料集的 train.txt 也就是遍歷指定路徑資料夾下面的路徑和名字,然後生成乙個 train.txt 下面是python的一種遍歷方法。import os import numpy as np defcreate txt name,path,file i...