分类:
2010-08-23 22:21:09
io.exist()//判断文件是否存在
|
file = io.open (filename [, mode]) // filename指定文件名(),mode参数可选的格式如下: |
模式后添加t表示以文本模式访问,添加b表示以二进制模式访问。
例如 "rb" 表示以二进制读模式打开文件。
1、a,w,r等只能出现在第一个标记
用a+ w+ r+表示扩展的属性,如r+表示可读写,而不是rw
2、可使用ccs标记指定编码,
如 str = string.load(str,"c:\\test.txt","r,ccs=UTF-8")
将UTF8编码的test.txt读入并转换为标准UNICODE编码
如果输入错误的标记会弹出错误提示,而不是程序崩溃。
','号后面的指定编码部份如果写错了,将会导致程序崩溃。如果需要在打开文件时自动捕获错误,可以这样写:
//io.open在打开文件失败时会返回两个参数: null,错误信息
//而assert函数在接收的第一个参数为null时断言失败,并会将第二个参数作为错误信息抛出异常
var file = assert(io.open("nofile.txt", "rb") )
文件操作(file)
io.stdout//标准输出对象(file)。
io.stdout.close()/*关闭文件流
|
io.stdout.flush()/*输出缓冲区数据
输出缓冲
file:flush()
输入缓冲区内容到文件中,以保存对文件的修改。
通常写入的内容在调用file.flush函数或者file.close函数才会保存到文件中。
******************************************************************************
读文件
file.read(...)
read函数从当前输入文件读取串,由它的参数控制读取的内容。
参数可以有多个,参数要设置的选项如下:
io.stdout.read("%d")/*读取数字
int = io.read("%d"): 从串中转换出数值
函数从当前输入文件中读取出一个数值(而不是字符串)。
当需要从一个文件中读取大量数字时,数字间的字符串为空白可以显著的提高执行性能。
%d选项会跳过两个可被识别数字之间的任意空格。这些可识别的字符串可以是-3, +5.2,1000,和 -3.4e-23。
如果在当前位置找不到一个数字(由于格式不对,或者是到了文件的结尾),
则返回null
可以对每个参数设置选项,函数将返回各自的结果。例如:
n1,n2,n3 = file.read("%d","%d","%s"):
io.stdout.read("%s")/*读取下一行
str = file.read("%s"): 读取下一行文本
函返回当前输入文件的下一行(不包含最后的换行符)。
当到达文件末尾,返回值为null(表示没有下一行可返回)。
该读取方式是read函数的默认方式,所以可以简写为file.read()。
io.stdout.read(0)/*检测是否读取到文件尾
str = file.read(0)
用来测试是否到达了文件末尾。如果不是返回一个空串,如果已是文件末尾返回null。
io.stdout.read(-1)/*读取全部数据
str = file.read(-1):
函数从当前位置读取整个输入文件。
如果当前位置在文件末尾,或者文件为空,函数将返回空串。
io.stdout.read(_)/*指定读取n个字节
str = file.read(n)
read函数将尝试从输入文件中读取n个字符。
如果无法读取到任何字符(已经到了文件末尾),函数返回nil。否则返回一个最多包含n个字符的串。
io.stdout.read()/*读取下一行
分行迭代读取文件 for line in io.lines("\") {} |
|
file参数也可以是使用io.open打开的文件对象,省略file参数则使用默认值io.stdin。
io.lines创建一个, 支持在循环中逐行读取文件,在读取完毕以后自动关闭文件对象。使用io.lines可以避免一次性读取太大的文件。
|
|
|
io.stdout.setvbuf("full",_)/*完全缓冲
io.stdout.setvbuf("no")/*禁用缓冲
|
io.stdout.seek("end",_)/*移动至相对结束处的指定偏移量
io.stdout.seek("end")/*移动指针至结束处(偏移值从文件尾往前计数)
io.stdout.seek("set",_)/*移动至相对开始处的指定偏移量
io.stdout.seek("set")/*移动指针至开始(偏移值是从文件头开始)
io.stdout.seek()/* 得到当前位置
whence的默认值为"cur",offset的默认值为0。
offset = file.seek()得到的返回值就是文件当前的存取位置,且保持位置不变。
file.seek("set")就是将文件的存取位置重设到文件开头。
而offset = file.seek("end")就是将位置设为文件尾,同时就可以得到文件的大小。
如果需要得到文件的大小又不改变读写指针的位置,可以这样写
var current = file.seek() //得到读写指针当前位置 var size = file.seek("end") //得到文件大小 file.seek("set", current) //恢复读写指针当前位置
io.stdout.write(_, )/*写数据,支持一个或多个参数
io.stdout.write()/*写数据,支持一个或多个参数
|
file = io.open(""); file.write("hello" + "world"); //不建议使用字符串连接 file.write("hello", "world"); //直接用多个参数更快更好
io.stdin//标准输入对象(file)。
。。。。
io.stderr//标准错误输出对象(file)。
。。。。。
|
io.print( var [,var2 , ... , varn])
这个函数类似io.stdout.write向标准输出流写入信息。
但是io.print支持任意的数据类型(自动调用tostring函数并转换为字符串)。
io.print会在参数之间自动添加制表符,输出所有的参数以后自动添加换行符。
而io.stdout.write不附加任何额外的字符到输出中去。