【问题标题】:Lua not producing table of functions (IO API)Lua 不生成函数表(IO API)
【发布时间】:2014-07-31 19:26:39
【问题描述】:

我正在使用 Lua 进行一个基本项目。我一直在尝试使用IO API(定义为here)从文件中获取数据,但是当我打开一个文件并给它一个句柄时,它似乎没有返回一个函数表。

(错误的)代码:

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()) 时,它会抛出“尝试索引 nil”。追查,原来handle本身就是nil。有什么想法吗?

【问题讨论】:

  • 试试print( file )看看它是只是文件名还是文件的整个路径。
  • 因为@hjpotter92 表明file 是否是有效路径,那么handle 应该是非零假设您有权读取文件。如果路径不正确或不完整(例如,相对于fs.list 调用中给出的路径),那么您需要修复fs 库或构建正确的绝对或相对路径,然后再尝试打开文件。跨度>
  • @hjpotter92 喜欢这个想法,我会看看它。我以为我有正确的道路,但没有意识到如果我做错了它会搞砸这么多。

标签: file-io lua lua-table


【解决方案1】:

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")
...

错误消息会告诉您是否没有读取文件的权限,或者是否存在其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2019-04-03
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多