Lua 文件 IO


Lua 文件 I/O

I/O 模式

在 Lua 中,文件 I/O 可以通过两种模式进行操作:文本模式和二进制模式。可以使用 io.mode 函数查看当前模式,例如:

print(io.mode(file))

该函数返回文件对象的当前模式,可能的值包括 “r” (读取模式)、“w” (写入模式)、“a” (追加模式)、“rb” (二进制读取)、“wb” (二进制写入)、和 “ab” (二进制追加)。

在打开文件时,可以指定 I/O 模式。例如,打开一个文件以读取文本:

file = io.open("filename.txt", "r")

相应地,打开一个二进制文件:

file = io.open("filename.bin", "rb")

读取文件

要从文件中读取内容,可以使用 file:read 函数。在文本模式下,该函数默认读取一行,并返回该行作为字符串。例如,读取文件中的第一行:

file = io.open("filename.txt", "r")
line = file:read()
print(line)

在二进制模式下,read 函数默认读取 1KB 的数据并返回该数据作为一个字符串。可以通过传递一个数字参数来指定要读取的字节数。例如,读取二进制文件中的前 4 个字节:

file = io.open("filename.bin", "rb")
bytes = file:read(4)
print(bytes)

写入文件

要向文件中写入内容,可以使用 file:write 函数。在文本模式下,该函数会将字符串写入文件。例如,向文件中写入一行:

file = io.open("filename.txt", "w")
file:write("Hello, world!")

在二进制模式下,write 函数会将指定的字节序列写入文件。例如,向文件中写入一个 32 位整数:

file = io.open("filename.bin", "wb")
file:write(string.char(0x12, 0x34, 0x56, 0x78))

关闭文件

在完成文件操作后,应该关闭文件以释放资源。可以使用 file:close 函数来关闭文件。例如,关闭一个文件:

file = io.open("filename.txt", "r")
-- 读取文件内容...
file:close()

异常处理

在文件操作时,可能会出现错误。为了避免程序崩溃,应该对可能出现的异常情况进行适当的处理。可以使用 pcall 函数来捕获任何可能出现的异常。例如,读取一个可能不存在的文件:

local file = io.open("filename.txt", "r")
if not file then
    print("Failed to open file!")
else
    local ok, line = pcall(file.read, file)
    if ok then
        print(line)
    else
        print("Failed to read file!")
    end
    file:close()
end

在这个示例中,当文件无法打开时,程序会输出 “Failed to open file!"。如果文件能够打开,程序会尝试读取文件。如果读取操作成功,它将输出文件的第一行。否则,它会输出 “Failed to read file!"。无论读取是否成功,程序都会关闭文件以释放资源。