函数 io.tmpfile
返回一个操作临时文件的句柄,该句柄是以读/写模式打开的。当程序运行结束后,该临时文件会被自动移除(删除)。
函数 flush
将所有缓冲数据写入文件。与函数 write
一样,我们可以把它当做 io.flush()
使用,以刷新当前输出流;或者把它当做方法 f:flush()
使用,以刷新流 f
。
函数 setvbuf
用于设置流的缓冲模式。该函数的第一个参数是一个字符串: "no"
表示无缓冲, "full"
表示在缓冲区满时或者显式地刷新文件时才写入参数, "line"
表示输出一直被缓冲直到遇到换行符或者一些特定文件(例如终端设备)中读取到了数据。对于后两个选项,函数 setvbuf
支持可选的第二个参数,用于指定缓冲区大小。
函数 seek
用来获取和设置文件的当前位置,常常使用 f:seek(whence, offset)
的形式来调用,其中参数 whence
是一个指定如何使用偏移的字符串。当参数 whence
取值为 "set"
时,表示相对于文件开头的偏移;取值为 "cur"
时,表示相对于文件当前位置的偏移;取值为 "end"
时,表示相对于文件尾部的偏移。不管 whence
的取值是什么,该函数都会以字母为单位,返回当前新位置在流中相对于文件开头的偏移。
whence
的默认值是 "cur"
, offset
的默认值是 0
。因此,调用函数 file:seek()
会返回当前的位置且不改变当前的位置;调用函数 file:seek("set")
会将位置重置到文件开头并返回 0
;调用函数 file:seek("end")
会将当前位置重置到文件结尾并返回文件的大小。下面的函数演示了如何在不修改当前位置的情况下获取文件大小:
function fsize (file) local current = file:seek() -- 保存当前位置 local size = file:seek("end") -- 获取文件大小 file:seek("set", current) -- 恢复当前位置 return size end
此外,函数 os.rename
用于文件重命名,函数 os.remove
用于移除(删除)文件。需要注意的是,由于这两个函数处理的是真实文件而非流,所以他们位于 os
库而非 io
库中。
上述所有的函数在遇到错误时,均会返回 nil
外加一条错误信息和错误码。