相关api的接口(lines,write,close等等)
Lua的I/O库为文件操作提供了两种不同的模型:简单模型和完整模型。
1,简单模型:
该模型假设有一个当前的输入文件和一个当前的输出文件,它的I/O操作均作用于当前选定的这两个文件。该模型下针对当前文件的所有操作方法均由表io提供。通过io.input和io.output确定当前需要操作的输入文件和输出文件,可以通过再次调用io.input和io.output的方法更改当前要操作的输入和输出文件。
默认情况下,I/O库将当前输入文件初始化为进程标准输入(stdin),将当前输出文件初始化为进程标准输出。在执行io.read()操作时,就会从标准输入中读取一行。io.input(filename)调用会以只读模式打开指定的文件,并将其设定为当前输入文件;除非再次调用io.input否则所有的输入都将来源于这个文件;在输出方面,io.output也可以完成类似的工作。
2,完整模型:
类似于C运行时库的文件操作函数,它们都是基于文件句柄的。 采用面向对象的风格并将所有的操作定义为文件句柄上的方法。
通过io.open 函数打开指定的文件,并且在参数中给出对该文件打开时使用的具体模式。在成功打开文件后,该函数将返回表示该文件的句柄,后面所有基于该文件的操作,都需要将该句柄作为参数传入(冒号语法糖的方式)。如果打开失败,返回nil。其中错误信息由该函数的第二个参数返回,如:
local file = assert(io.open(filename[,mode])) --如果打开失败assert将打印第二个参数给出的错误信息。
此时返回的file就是当前完整模型下的文件句柄。
出现两种模型,主要是为了解决文件操作的一些高级用法(比如:同时读取多个文件,简单模型同一时刻只能操作一个当前的输入文件)
二,文件读取模式
1,io.open中的mode方式
模式 | 描述 |
"r" | 只读模式,只读方式打开(默认),不能写入,该文件必须存在,否则报错 |
"w" | 只写模式,不能读取; 若文件存在则文件内容清空,文件长度清为0,写入新的内容; 若文件不存在则建立该文件。 |
"a" | 追加模式,不能读取; 以写入内容附加的方式打开文件; 若文件不存在,则会建立新的文件; 如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) |
"r+" | 以可读写的方式打开文件,保留原有的数据; 后续可对该文件已有的内容进行读写操作,该文件必须存在(该模式自由度最高) |
"w+" | 以可读写的方式打开文件,会删除原有数据; 如果文件已存在则删除文件中数据,即文件会是个空文件; 若文件不存在则新建文件,文件内容也会是空。 |
"a+" | 以可读写的方式打开文件,保留原有的数据; 只能在文件末尾添加,不能在文件中间改写数据; 若找不到文件,则创建新的文件。 |
"r"和"r+"的模式下,文件不存在时会报错;"a","a+","w","w+"模式下文件不存在时会自动创建文件。
2,io.read中的mode方式
"*all" | 从当前位置读取整个文件,若为文件尾,则返回空字串 |
"*line" | [默认]读取下一行的内容,若为文件尾,则返回nil |
"*number" | 读取指定字节数的字符,如果number为0则返回空字串,若为文件尾,则返回nil; |
<num> | 读取num个字符到串 |