Lua-输入输出处理

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

  • io表调用方式:使用io表,io.open可以打开文件,并返回文件句柄,所有的操作都将围绕着这个文件句柄。
    进程在启动的时候,会打开三个文件:标准输入、标准输出、标准错误输出,在Lua中,这三个文件所对应的文件句柄分别是:io.stdin、io.stdout、io.stderr。
  • 文件句柄直接调用方式:即使用file:XXX()函数方式进行操作,其中file为io.open返回的文件句柄。

io表

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

  • r - 读模式(默认的模式),不能修改文件的内容
  • w - 写模式,文件存在则清空,不存在则创建
  • a - 追加模式,只允许在文件末尾进行追加
  • b - 以二进制模式打开
  • r+ - 读更新模式,保存之前的文件内容
  • w+ - 写更新模式,清空之前的文件内容
  • a+ - 追加更新,只允许在文件末尾进行追加

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是否是一个可用的文件句柄。
返回:

  • file - obj是一个打开的文件句柄
  • closed file - obj是一个已关闭的文件句柄
  • nil - obj不是文件句柄

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


文件句柄

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

  • *n - 读取一个数字
  • *a - 从当前位置读取整个文件。若为文件尾则返回空串
  • *L - [默认]按行读取,若为文件尾则返回nil
  • number - 读取指定字节数的字符,若为文件尾则返回nil。如果number为0则返回空字符串。

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

  • set - 从文件头开始
  • cur - 从当前位置开始[默认值]
  • end - 从文件尾开始

offset的默认值是0。

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

  • no - 不缓冲,直接输出到文件
  • full - 全缓冲,当缓冲区满了之后才输出到文件(也可调用flush马上输出到文件)
  • line - 以行为单位进行输出

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

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

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

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

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

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: