IO标准库提供两种不同的方式进行文件处理


io表

io.open(filename [, mode])
功能:按照指定的模式打开文件filename,成功则返回文件句柄,失败则返回nil+错误信息。
模式有:

io.close([file])
功能:相当于file:close(),用来关闭一个文件句柄。file的默认值是默认输出文件。

io.flush([file])
功能:相当于file:flush(),将输出缓冲区的内容刷到文件。file的默认值是默认输出文件。

io.lines([filename])
功能:以读模式打开文件filename,并返回一个迭代器函数,每次调用迭代器函数都会返回文件的一行,第一次调用时返回第一行,第二次调用时返回第二行,以此类推,当读到文件末尾时,将返回nil,并且自动关闭文件句柄。
不带参数时,io.lines() <=> io.input():lines(),读取默认输入文件的内容,但是结束时,不关闭文件。

io.input ([file])
功能:当使用文件名调用它的时候,io.input将以读模式打开文件,并且把句柄设置为默认输入文件;当使用文件句柄调用它的时候,io.input将把这个文件句柄设置为默认输入文件;当不使用参数调用它的时候,io.input将返回默认输入文件。
当出错的时候,这个函数会抛出错误,而不是返回错误代码。

io.output([file])
功能:与io.input类似,但操作在默认输出文件上。

io.popen ([prog [, mode]])
功能:在一个单独的进程中,启动程序prog,并返回一个文件句柄。可以使用返回的文件句柄从进程中读取数据(mode是r的时候,并且mode的默认值是r),也可以使用返回的文件句柄向进程写数据(mode是w的时候)。
这个函数是系统依赖的,并不是所有的平台都可用。

io.read(...)
功能:相当于io.input():read

io.write(...)
功能:相当于io.output():write

io.type (obj)
功能:检测obj是否是一个可用的文件句柄。
返回:

io.tmpfile()
功能:该函数返回一个临时文件的句柄,该临时文件以更新模式打开,程序结束时,自动删除。


文件句柄

fd:read(...)
功能:按照指定的格式读取一个文件,函数返回字符串或数字,如果不能正确读取将返回nil。
如果没有指定格式,将按行进行读取。
格式有:

file:seek([whence][,offset])
功能:设置和获取当前文件指针位置,成功则返回最终的文件指针位置(按字节),失败则返回nil+错误信息。
whence:

offset的默认值是0。

file:setvbuf(mode,[,size])
功能:设置输出缓冲区的大小
mode:

最后两个模式,size可以指定输出缓冲区的大小(按字节),忽略size将自动调节为最佳大小。

file:write(...)
功能:将内容写到文件,参数必须是string或number类型。

file:lines()
功能:返回一个迭代器函数,每次调用迭代器函数都返回一行,第一次调用返回第一行,第二次调用返回第二行,以此类推,当读到文件末尾时,将返回nil,但不会关闭文件句柄。

file:flush()
功能:将输出缓冲区的内容刷到文件。

file:close()
功能:关闭文件句柄。
注意:当文件句柄被垃圾回收时,将自动关闭。句柄将变为一个不可预知的值。