2014-06-10 61 views
1

我正在研究Lua中的一個基本項目。我一直試圖從使用IO API(定義爲here)的文件中獲取數據,但是當我打開一個文件並給它一個句柄時,它似乎沒有返回一個函數表。Lua沒有生成函數表(IO API)

代碼(的錯誤位):

local unread = fs.list("email/"..from.."/") 
local send = "" 
for _,file in ipairs(unread) do 
    local handle = io.open(file,"r") 
    local text = handle:read("*a") 
    send = send .. text .. "\n" 
    handle.close() 
    fs.delete(file) 
end 

您在第一行看到的fs是一家專業的文件系統的包裝輪IO API,而不是我的工作,完美無差錯,所以這不是問題。但是,當我嘗試讀取文件(handle:read())時,它會引發「嘗試索引零」。跟蹤它,事實證明,handle本身是nil。有任何想法嗎?

+2

嘗試'print(file)'查看它是否只是文件名或文件的整個路徑。 – hjpotter92

+0

由於@ hjpotter92指出如果'file'是一個有效的路徑,那麼'handle'應該是非零,假設你有權限讀取文件。如果路徑不正確或不完整(例如,相對於'fs.list'調用中給出的路徑),那麼您需要修復'fs'庫或在嘗試打開文件之前構建正確的絕對或相對路徑。 –

+0

@ hjpotter92喜歡這個想法,我會看看它。我認爲我有正確的道路,但是沒有意識到如果我錯了,它可能會把它搞砸。 – ArtOfCode

回答

3

io.open在成功時返回文件句柄,在失敗時返回錯誤消息爲nil(按照Lua參考手冊)。這意味着,真的是你應該使用

handle, err = io.open(file, 'r') 
if handle == nil then 
    print('could not open file:', file, ':', err) 
    return 
end 
local text = handle:read("*a") 
... 

的錯誤信息會告訴你,如果你沒有權限讀取的文件,或者有一些其他的問題。