相关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个字符到串