第一版是针对 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些不同之处。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目。
用 Lua 编程 | ||
第三部分。标准库 第 21 章。I/O 库 |
要对 I/O 进行更多控制,您可以使用完整模型。此模型中的一个核心概念是文件句柄,它等效于 C 中的流 (FILE*
):它表示具有当前位置的打开文件。
要打开文件,请使用 io.open
函数,它模仿 C 中的 fopen
函数。它接收要打开的文件的名称以及模式字符串作为参数。该模式字符串可能包含用于读取的 `r
´、用于写入(这也将擦除文件的所有先前内容)的 `w
´ 或用于追加的 `a
´,以及用于打开二进制文件的可选 `b
´。open
函数返回文件的新句柄。如果出现错误,open
将返回 nil,以及错误消息和错误号
print(io.open("non-existent file", "r")) --> nil No such file or directory 2 print(io.open("/etc/passwd", "w")) --> nil Permission denied 13错误号的解释取决于系统。
检查错误的典型习惯用法是
local f = assert(io.open(filename, mode))如果
open
失败,错误消息将作为第二个参数传递给 assert
,然后显示该消息。
打开文件后,您可以使用 read
/write
方法从该文件读取或向该文件写入。它们类似于 read
/write
函数,但您使用冒号语法在文件句柄上调用它们作为方法。例如,要打开文件并全部读取,可以使用如下代码块
local f = assert(io.open(filename, "r")) local t = f:read("*all") f:close()
I/O 库还为三个预定义的 C 流提供句柄:io.stdin
、io.stdout
和 io.stderr
。因此,您可以使用如下代码将消息直接发送到错误流
io.stderr:write(message)
我们可以将完整模型与简单模型混合使用。通过调用io.input()
(无参数)来获取当前输入文件句柄。我们使用调用io.input(handle)
来设置当前输入文件句柄。(类似的调用也适用于io.output
。)例如,如果你想暂时更改当前输入文件,你可以编写类似这样的内容
local temp = io.input() -- save current file io.input("newinput") -- open a new current file ... -- do something with new input io.input():close() -- close current file io.input(temp) -- restore previous current file
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |