Lua I/O库(二)

来源:互联网 发布:网络服务器机柜厂家 编辑:程序博客网 时间:2024/06/06 05:52

    Lua中本身对文件所提供的操作,主要包含在I/O库中,该库以.io字段的方式存储在全局的_G表中,遍历打印_G.io即可获取对应库所提供的文件操作的API函数。


io.lines([filename])

--->以读模式打开指定的filename文件,并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件

若不带参数时io.lines() <=> io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件。


{

迭代函数:

内部维护了一个闭合函数和变量var,每次调用时var值+1,同时产生并返回一个新的闭合函数,在闭合函数中通过变量var索引table中的元素达到操作table表元素的目的,闭合函数中也可以处理其他的功能逻辑。


}

file:lines()

--->返回一个迭代器函数,每次调用将获得文件中的一行内容,当到文件尾时将返回nil,但不关闭文件。

io.write(...)

--->相当于io.output():write该函数将所有参数顺序的写入到当前输出文件中(默认是stdin中)。


file:write(...)

--->函数功能同上,此时写入的目标文件是当前操作的file句柄所打开引用的文件,按指定的参数格式输出文件内容,参数必须为字符或数字,若要输出其它值,则需通过tostringstring.format进行转换。


io.close([filename])

--->不给出文件时,关闭默认的输出文件。

file:close()

--->关闭文件句柄关联的对应的输出文件。文件在句柄被垃圾回收时会自动关闭, 多久以后关闭是不可预期的。


io.flush()

--->输出所有缓冲中的内容到默认或指定的输出文件中。

file:flush()

--->将缓冲区中的内容写入到file句柄对应的文件中。

open,read,input,output函数请参考这一篇: Lua I/O库(一)


io.type(fileobj)

--->检测fileobj是否一个可用的文件句柄;返回一个字符串
    1,"file":为一个打开的文件句柄
    2,"closed file":为一个已关闭的文件句柄
    3,nil:表示obj不是一个文件句柄


io.stdin,io.stdout,io.stderr

--->通过打印io的字段信息可以看出,这3个是属于预定义C语言的标准流句柄,即io.stdin(标准输入)、io.stdout(标准输出)、io.stderr(标准错误输出)


io.popen(prog [, mode])(援引:io.popen)

--->可操作文件的同时又可以执行命令与函数os.execute()有点相似。

  在额外的进程中启动程序prog,并返回用于prog的文件句柄。通俗的来说就是使用这个函数可以调用一个命令(程序),并且返回一个和这个程序相关的文件描述符,一般是这个被调用函数的输出结果,这个文件打开模式由参数mode确定,有取值"r""w"两种,分别表示以读、写方式打开,默认是以读的方式。


io.tmpfile()

--->返回一个临时文件句柄,该文件以更新模式打开,程序结束时自动删除。


file:seek([whence][,offset])

--->获取当前文件位置,成功则返回最终的文件位置(按字节),失败则返回nil加错误信息:
    "set": 从文件头开始
    "cur": 从当前位置开始[默认]
    "end": 从文件尾开始
     offset:默认为0,不带参数file:seek()则返回当前位置,file:seek("set")则定位到文件头,file:seek("end")则定位到文件尾并返回文件大小


file:setvbuf(mode,[,size])

--->设置输出文件的缓冲模式mode:
   "no": 没有缓冲,即直接输出
   "full": 全缓冲,即当缓冲满后才进行输出操作(也可调用flush马上输出)
   "line": 以行为单位,进行输出(多用于终端设备)
   最后两种模式,size可以指定缓冲的大小(按字节),忽略size将自动调整为最佳的大小

原创粉丝点击