C语言文件的输入与输出
一. 文件指针
  每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文什状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统定义的,取名为FILE。在sudio.h文件中有以下的文件类型声明:
typedef struct
short level;   /*缓冲区的程度*/
       unsigned  flags; /*文件状态标志*/
       char fd;        /*文件描述符*/
       unsigned char hold;  /*如无缓冲区不读取字符*/
       short bsize;        /*缓冲区的大小*/
       unsigned char *buffer;/*数据缓冲区的位置*/
       unsigned char *curp;    /*指针,当前的指向*/
       unsigned istemp;     /*临时文件,指示器*/
       short token;        /*用于有效性检查*/
FILE
   在缓冲文件系统中,每个被使用的文件都要在内存中开辟一FILE类型的区,存放文件的有关信息。
    FILE类型的数组:FILE f5;定义了一个结构体数组f,它有5个元素,可以用来存放5个文件的信息。
有了文件指针类型,就可以用它来定义文件指针变量,用文件指针变量来访问文件,其形式为:FILE  *指针变量名。例如:FILE *fp;其中fp是指向要访问文件的指针变量。例如,通过文件指针访问文件,有如下的访问:
FILE  *fp;
fp=fopen(, rb);
ch=getc(fp);
第一行语句只定义了一个没有指向的文件指针fp,第二行是打开文件,并同时确定对访问文件的操作方式(此处对访问的文件只进行读操作),这时给文件结构中的成员信息赋值,并使fp指向文件,第三行是利用文件指针对文件进行操作,操作方式应当与打开文件时确定的方式一致(只读)。由此可以看出,操作文件过程中不出现对文件结构成员的访问语句。
   如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件,确定打开方式,利用有关函数对文件指针操作即可。例如:下面语句定义了三个文件指针,在程序中就可以处理三个不同的文件。
FILE *fa*fb*fc;
二.文件的打开与关闭
2.1文件的打开(fopen函数)
打开文件的首要工作就是要改变文件的标志,使其由闭到开,并且把下面信息告诉编译系统:
需要打开的文件名,也就是准备访问的文件的名字;
    ②使用文件的方式(还是等);
    ③让哪一个指针变量指向被打开的文件。
打开函数的原型是定义在stdio.h头文件中的fopen函数,其格式为: fopen(“文件名,“使用文件方式
    即:FILE=fopen(“文件名,“使用文件方式
例如:fp=fopen(file, r);
它表示,要打开的文件名为file,操作方式为读入,fopen函数返回指向file文件的指针并赋值给指针变量fp,这样fp和文件file就建立了联系。文件名字符串允许带有路径,使用路径时,路径分隔符是\ 而不是\\
例如:FILE  *fp*fq;
      fp=fopen(student,w)
      fq=fopen(D:liuli\student34”,“r);
以上语句表明,在当前磁盘,当前目录下以只写方式打开一个新文件,并将该文件的内存存储的首地址赋予文件指针fp,再以只读方式打开Dliuli子目录下名字为student34的已经存盘的旧文件,并将该文件的内存存储的首地址赋予文件指针fq
注意:如果fopen函数调用失败,即文件打开失败,fopen函数将返回空指针NULLNULL在头文件中被定义为0.
文件使用方式及含义
文件操作方式
含义
打开文件方式
r
打开一个文本文件
只读
w
打开一个文本文件
只写
afgets和fgetc的区别
打开一个文本文件,向文本文件尾增加数据
追加
rb
打开一个二进制文件
只读
wb
打开一个二进制文件
只写
ab
打开一个二进制文件,向二进制文件尾增加数据
追加
r+
打开一个文本文件
/
w+
建立一个新的文本文件
/
  a+
打开或生成一个文本文件
/
rb++
打开一个二进制文件
/
wb++
建立一个新的二进制文件
/
ab++
打开或生成一个二进制文件
/
说明:
    (1)r”方式打开文件的目的是为了从文件中读取数据,不能向文件写入数据,而且该文件应该已经存在,不能用r”方式打开一个并不存在的文件;否则出错。
    (2)w”方式打开的文件只能用于向该文件写数据(即输出文件),而不能用来向计算机输入。如果原来不存在该文件,则在打开时新建立一个以指定的名字命名的文件。如果原来已存在一个以该文件名命名的文件,则在打开时将该文件删去,然后重新建立个新文件。
    (3)如果希望向文件末尾添加新的数据(不希望删除原有数据),则应该用a”方式打开。但此时该文件必须已存在;否则将得到出错信息。打开时,位置指针移到文件末尾。
    (4)"r+w+”、a+”方式打开的文件既可以用来输人数据,也可以用来输出数据。用"r+方式时该文件应该已经存在,以便能向计算机输人数据。用w+”方式则新建立一个文件,先向此文件写数据,然后可以读此文件中的数据。用a+”方式打开的文件,原来的文件不被删去,位置指针移到文件末尾,可以添加,也可以读。
    (5)如果不能实现打开的任务,fopen函数将会带回一个出错信息。出错的原因可能是用"r"方式打开一个并不存在的文件;磁盘出故障;磁盘已满无法建立新文件等。此时fopen函数将带回一个空指针值NULL(NULLstdioH头文件中已被定义为0)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。