1.什么是文件
(1)程序文件:程序源文件(后缀为.c)目标文件(后缀文件为.obj)、可执行文件(后缀为.exe)等。这种文件时程序代码
(2)数据文件:是供程序运行时读写的数据
(3)数据流:输入输出是数据的传输过程
2.文件名
(1)文件路径
(2)文件名主干
(3)文件后缀
3.文件分类
数据文件分为ASCII文件和二进制文件,数据在内存中是以二进制形式存储的,不加转换就是二进制文件,被称为影像文件
ASCII文件被称为文本文件
4.文件缓冲区
ANSI C标准采用缓冲”文件系统 “处理数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区,从内存向磁盘输出数据必须先送到内存的缓冲区,装满缓冲区才一起送到磁盘中
5.打开与关闭文件
(1)用fopen函数打开数据文件
fopen(文件名,使用文件方式);
如:
FILE * fp;
fp=fopen("a1","r");
使用文件方式
文件使用方式 | 含义 | 如果指定的文件不存在 |
“r”(只读) | 为了输入数据,打开一个已存在的文本文件 | 出错 |
“w”(只写) | 为了输出数据,打开一个文本文件 | 建立新文件 |
“a”(追加) | 向文本文件尾添加数据 | 出错 |
“rb”(只读) | 为了输入数据,打开一个二进制文件 | 出错 |
“wb”(只写) | 为了输出数据,打开一个二进制文件 | 建立新文件 |
“ab”(追加) | 向二进制文件尾添加数据 | 出错 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建立一个新的文本文件 | 建立新文件 |
“a+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“rb+”(读写) | 为了读和写,打开一个二进制文件 | 出错 |
“wb+"(读写) | 为了读和写,建立一个新的二进制文件 | 建立新文件 |
“ab+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
(2)关闭文件用fclose函数
fclose(文件指针);
例:
fclose(fp);
如果不关闭文件,有可能缓冲区不满,造成还未写入文件,造成文件丢失
3.顺序读写数据文件
函数名 | 调用形式 | 功能 | 返回值 |
fgetc | fgetc(fg) | 从fp执行的文件读入一个字符 | 读成功,带回所读的字符,失败则返回文件结束标志EOF(即 -1) |
fputc | fputc(ch,fp) | 把字符ch写到文件指针变量fp所指向的文件中 | 输出成功返回值就是输出的字符,输出失败,则返回EOF(即-1) |
4.向文件读写一个字符串
函数名 | 调用形式 | 功能 | 返回值 |
fgets | fgets(str,n,fp) | 从fp指向的文件读入一个长度为(n-1)的字符串,存放到数组str中 | 读成功,返回地址str,失败则返回NULL |
fputs | fputs(str,fp) | 把str所指向的字符串写到文件指针变量fp所指的文件中 | 输出成功,返回0;否则返回0值 |
函数原型
(1)fgets函数的函数原型为
char *fgets(char * str,int n,FILE *fp);
(2)fputs函数原型为
int fputs(char * str,FILE * fp);
用格式化的方式读写文件
fprinf(文件指针,格式字符串,输出列表);
fscanf(文件指针,格式字符串,输入列表):
用二进制方式向文件读写一组数据
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:是一个地址。对fread来说,它是用来存放文件读入的数据存储区地址
size:要读取的字节数
count:要读写多少个数据相(每个数据项长度为size)
fp:FILE类型指针
随机读写数据文件
(1)文件位置标记及其定位
1.文件位置标记,顺序写文件是每写完一个数据后,文件位置标记顺序向后移一个位置,然后再下一次执行写操作时把数据写入指针所在的位置。
2.文件位置的标记
(1)可以用rewind函数使文件位置标记指向文件开头,rewind函数的作用是使文件位置标记重新返回文件开头,此函数没有返回值
(2)用fseek函数改变文件位置标记
fseek(文件类型指针,位移量,起始点);
起始点 | 名字 | 用数字代表 |
文件开始位置 | SEEK_SET | 0 |
文件当前位置 | SEEK_CUR | 1 |
文件末尾位置 | SEEK_END | 2 |
fseek(fp,100L,0); // 将文件位置标记向前移离文件开头100个字节处
fseek(fp,50L,1) // 将文件位置标记向前移离当前位置50个字节处
fseek(fp,-10L,2) // 将文件位置标记从文件末尾处向后10个字节处
(3)用ftell函数测定文件位置标记当前位置
ftell函数的作用是得到流式文件位置标记的当前位置
5.文件读写的出错检测
1.ferror函数
ferror(fp)
如果ferror返回值为0(假),表示未出错;如果返回一个非零值,表示出错
2.clearerr函数
clearerr的作用是使文件错误标志和文件结束标志为0。
假设ferror函数值为一个非零的值,应该立即调用clearerr(fp),使ferror(fp)的值变为0,以便进行下一次的检测