Lua io.open()
2016-07-19 本文已影响2651人
AlbertS
前言#
上一章我们在讲解函数os.tmpname()的时候涉及到了几个IO
库中函数,可能有些朋友会看的迷糊,那么接下来我会开始Lua IO
库的讲解,相信在熟悉这些函数以后,一定会对我们的工作有所帮助。
Lua的IO库对于文件操作提供了两种不同的方式:第一种使用隐式文件描述符,通过io表中的各种方法来实现,使用这种方式的前提是操作之前先设置默认的操作文件,包括输入文件和输出文件;第二种方法就是使用显示文件描述符,这种方式需要使用io.open()
方法返回的文件来调用方法。
Lua的io
表中提供了3种预定义的文件描述符io.stdin,io.stdout,io.stderr
,这三种文件描述符永远不会被关闭。
在没有特殊说明的情况系,所有的IO函数在失败的情况下返回nil
(外加错误信息作为函数的第二个返回值和一个依赖于系统的错误代码作为第三个函数返回值),当然也有一些函数在成功的情况下返回nil
,在非POSIX系统下,当发生错误时,错误信息和徐哦呜代码的产生也许不是线程安全的,因为他们依赖于C的全局变量errno
。
内容#
io.open()##
-
原型:io.open (filename [, mode])
-
解释:这个函数会以参数
mode
所描述的方式代开文件filename
并返回一个文件描述符,如果出错将会返回nil
并且附带一个错误信息。不同的mode
含义解释如下:- "r":以只读方式打开文件,该文件必须存在,否则返回
nil
。(默认的打开方式) - "w":以只写方式打开文件,若文件存在则清空文件内容,若文件不存在则建立该文件,从头开始写入。
- "a":以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
- "r+":以读写方式打开文件,该文件必须存在,读取时从文件头开始读,写入时从文件头开始写,保留原文件中没有被覆盖的内容;
- "w+":以读写方式打开文件,若文件存在则清空文件内容。若文件不存在则建立该文件,从头开始写入,读取文件时从头读取。
- "a+":以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
- "r":以只读方式打开文件,该文件必须存在,否则返回
Usage##
- 首先我们新建一个文件命名为opentest.lua,然后编写代码如下:
-- 打开存在的文件
local file, msg = io.open("iotest.txt",'r')
if file == nil then
print(msg)
else
print("open exist file success :")
print(file)
end
-- 打开不存在的文件
local ret, errormsg = io.open("iotest2.txt", "r")
print("\nopen don't exist file ret :")
print(ret)
if ret == nil then
print(errormsg)
end
- 运行结果:
总结#
- 代码中我们使用了
mode="r"
的方式打开文件是由于这种模式要求文件必须存在,如果使用其他模式可能会创建新的文件,而不会返回失败。 - 我们可以使用
mode="r"
的特性来自己实现一个检测文件是否存在的函数。 - 注意取得函数错误信息的方法,便于查找错误原因。