C 对文件的输入输出
文件类型及概念
所谓 “文件” 一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,如果想找存放在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外部介质(磁盘)上存储数据也必须先建立一个文件(以文件名作为标志),才能向它输出数据。输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即数据流。流表示了信息从源到目的端的流动。
文件类型:
(1)程序文件:内容是程序代码。包括 .c , .obj , .exe 为后缀的文件等。
(2)数据文件:文件的内容不是程序,而是供程序运行时读写的数据。
文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用。文件标识包括三部分:
(1)文件路径
(2)文件名主干。文件名主干的命名规则遵循标识符的命名规则。
(3)文件后缀。后缀表示文件的性质。如: doc ( word生成的文件),txt(文本文件),dat(数据文件),c(C语言源程序文件),obj(目标文件),exe(可执行文件),ppt(电子幻灯文件),bmp(图形文件)等。
文件缓冲区
ANSI C标准采用 “缓冲文件系统”处理数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。每一个文件在内存中只有一个缓冲区。
缓冲文件系统中,每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(文件名、文件状态、文件当前位置等),这些信息保存在一个结构体变量中。该结构体类型是由系统声明的,取名为 FILE。如:
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 * fp;
定义 fp 是一个指向 FILE 类型数据的指针变量,通过文件指针变量能够找到与它关联的文件。如果有 n 个文件,应设 n个指针变量,分别指向 n 个 FILE 类型变量,以实现对 n 个文件的访问。
注意:指向文件的指针变量并不是指向外部介质(磁盘)上的数据文件的开头,而是指向内存中的文件信息区的开头。
打开、读写及关闭文件
对文件读写之前应该“打开”该文件,在使用结束之后应“关闭”该文件。“打开”是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。
打开数据文件:
fopen(文件名,使用文件方式);
如:
FILE *fp; //定义一个指向文件的指针变量 fp;
fopen("a1","r"); //将 fopen 函数的返回值赋给指针变量 fp;
这样就是 fp指向了 a1 文件,可知,在打开一个文件时,通知编译系统以下三个信息:
(1)需要打开文件的名字
(2)使用文件的方式
(3)让哪一个指针变量指向被打开的文件
使用文件方式:
如果不能实现“打开”的任务,fopen 函数将会带回一个出错信息。常用打开文件方法:
if((fp = fopen("filel","r")) == NULL
{
printf("cannot open this file\n");
exit(0);
}
exit函数的作用是关闭所有文件,终止正在执行的程序,待用户检查出错误,修改后重新运行。
关闭数据文件:
fclose(文件指针);
如:
fclose(fp);
用 fclose 函数关闭文件时,先把缓冲区中的数据输出到磁盘文件,然后才撤销文件信息区。
fclose 函数也带回一个值,当成功地执行了关闭操作,则返回值为0,否则返回 EOF(-1);
读写数据文件:
fgetc(fp) //从 fp 指向地文件读入一个字符,读成功,带回所读的字符,失败则返回文件结束标志 EOF (即-1)
fputc(fp) //把字符 ch 写到文件指针变量 fp 所指向的文件中,输出成功,返回值就是输出的字符;输出失败,则返回 EOF 。
fgets(str,n,fp) //从fp所指向的文件读入一个长度为(n-1)的字符串,存放到字符数组 str 中。读成功,返回地址str,失败则返回 NULL。
fputs(str,fp) //把 str 所指向的字符串写到文件指针变量 fp 所指向的文件中。