2012-12-02 64 views
1

這裏是我一直在試圖做的lua。與lua提取文件數據

我有很多圖片我在2+計算機之間來回轉移。我總是最終擁有多張照片。我希望我的lua代碼從文件夾中獲取所有文件名,並允許我輸入程序將與文件名列表進行比較的搜索過濾器(文件名),並讓我知道它是否已經在文件夾中或不。過去幾天我一直在爲自己的大腦拼命工作,但沒有運氣,迄今爲止我所獲得的文本框都是由我製作的,我可以讓lua使用以下方式返回有關文件夾中文件的數據:

local f = io.popen("dir \"C:\\mydir\\\"") 
if f then 
    print(f:read("*a")) 
else 
    print("failed to read") 
end 
+0

爲什麼不考慮一個已經建立的工具來保持文件夾同步?例如,Dropbox可能會正是你需要在這裏... –

回答

3

標準Lua沒有做你想做的機制。這是一種爲嵌入式系統設計的腳本語言,與擁有龐大,功能豐富的運行時庫的Python不同。

如果你想這樣做,你應該考慮使用the Lua FileSystem module。它可以得到目錄列表和那種事情。

+0

好吧生病檢查出來,雖然我不知道很多關於盧亞但我知道甚至更少關於文件系統模塊大聲笑 –

+0

@Jason我會建議看看文件系統模塊,因爲它可以讓你輕鬆檢查文件大小更新日期等。我也使用MD5模塊來比較文件。有一個使用它讀取目錄樹的例子:http://www.fhug.org.uk/wiki/doku.php?id=plugins:code_snippets:directory_tree –

+0

最好的解決方案確實是LFS。我更喜歡Penlight庫提供的API(http://stevedonovan.github.com/Penlight/ - 請參閱pl.path和pl.dir),這取決於LFS。 – catwell

1

如何從一些文件夾獲取文件名的數組:

local function get_files(path, prepend_path_to_filenames) 
    if path:sub(-1) ~= '\\' then 
     path = path..'\\' 
    end 
    local pipe = io.popen('dir /b/a-d "'..path..'*.*" 2> nul') 
    local output = pipe:read'*a' 
    pipe:close() 
    -- If your file names contain national characters 
    -- output = convert_OEM_to_ANSI(output) 
    local files = {} 
    for filename in output:gmatch'[^\r\n]+' do 
     if prepend_path_to_filenames then 
     filename = path..filename 
     end 
     table.insert(files, filename) 
    end 
    return files 
end 

local array_of_files = get_files('C:\\mydir', false) 
for _, fn in ipairs(array_of_files) do 
    print(fn) 
end 

空數組會在路徑的情況下返回不存在(空文件夾和不存在的文件夾之間沒有區別)。