Lua文件处理

最近我遇到了这个错误:

lua: Lua Testing.lua:36: bad argument #1 to 'read' (invalid option)
stack traceback:
        [C]: in function 'read'
        Lua Testing.lua:36: in main chunk
        [C]: ?

但我不确定为什么会发生这种情况。以下是我的代码:

file = assert(io.open("test.txt", "r"), "no file.")
print(io.read(file))
io.close(file)

简单解释一下,我使用assert确保文件存在。 我对Lua还很陌生。我在谷歌上搜索了这个错误,但没有找到任何有助于修复它的东西。

点赞
用户7396148
用户7396148

你没有正确使用 io.open 的结果。

打开文件后,您可以使用 read/write 方法来读取或写入文件。它们与 read/write 函数类似,但是您需要使用表示该文件句柄的冒号语法作为方法调用。例如,要打开文件并读取全部内容,可以使用以下代码块:

   local f = assert(io.open(filename, "r"))
   local t = f:read("*all")
   f:close()

此外,你没有获得很好的错误消息,我的 IDE 给出了以下消息:

so_test2.lua:2: bad argument #1 to 'read' (string expected, got FILE*)
stack traceback:
    [C]: in function 'io.read'
    so_test2.lua:2: in main chunk
    [C]: in ?

可以看出,错误消息中明确告诉我们函数预期要提供一个字符串,但实际提供的是一个 FILE*(文件句柄)。


《在 Lua 中编程》是学习 Lua 的一本很好的资源。

2021-04-01 19:38:07