文 件
①文件的概念:所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,即文件名。
②文件通常是驻留在外部介质(如磁盘)上的,在使用时才调入内存中来。
③☆文件缓冲区的概念:1)文件缓冲区是内存中的一块区域,用于进行文件读写操作时数据的暂存。在计算机系统中,数据是从内存中的程序数据区到文件缓冲区暂存,当缓冲区放满后,数据才被整块送到外存储器上的文件中。
2)磁盘的存取单位是“块”。
3)设立缓冲区的目的:提高效率! 有文件缓冲区可以减少和磁盘打交道的次数。
④文件的打开与关闭:
(1)文件的打开 fopen()函数。调用形式: 文件指针名=fopen(文件名,打开文件方式);
eg: FILE *fp;
fp=fopen("file1","r");
其中:“文件指针名”必须是说明为FILE类型的指针变量。
“打开方式”如下表所示:
(2)文件的关闭 fclose()函数。文件一旦使用完毕,应及时关闭,避免文件写数据时,未将缓冲区充满,因而未上传到磁盘上,造成数据的丢失。fclose()函数强制系统将缓冲区中的所有数据送到磁盘。
调用形式:fclose(文件指针) eg:fclose(fp);
⑤文件顺序读写:
1)读字符函数 fgetc()
调用形式:字符变量=fgetc(文件指针); eg:ch=fgetc(fp); 意义:从fp指向的文件中读取一个字符 并送入ch变量中 。
2)写字符函数 fputc()
调用形式:fputc(字符量,文件指针); eg:fputc('a',fp); 意义:把字符a写入fp所指向的文件中 。
3)读字符串函数 fgets()
调用形式:fgets(字符数组名,n,文件指针) eg:fgets(str,n,fp); 意义:从fp所指的文件中读出n-1个字符送入字符数组str中。
4)写字符串函数 fputs()
调用形式:fputs(字符串,文件指针) eg:fputs("abcd",fp); 意义:把字符串“abcd”写入fp所指的文件之中。
5)格式化读函数 fscanf() /*fscanf函数与fprintf函数与scanf和printf函数功能相似,区别在于scanf和printf的读写对象
6)格式化写函数 fprintf() 是键盘和显示器,而fscanf和fprintf读写对象是磁盘文件。*/
⑥:文件的随机读写
文件的顺序读写是指读写文件只能从头开始,但实际问题中,有时需要只需文件的某一指定部分。进而来到文件的随机读写。
1)文件定位
为了准确控制文件中的读写位置,C语言为每个文件在打开操作时,在文件结构体中设有一个读写位置指针,这个指针指示着当前读写位置。在文件打开的初始状态,一般这个指针都指向文件的开始处(但若以追加的方式打开,是指向文件的末尾处),随着文件的读写,这个指针会自动移动。
移动文件内部指针的函数有两个:
rewind()函数 关于rewind()函数,详见我的另一篇博客《C语言中的rewind()函数》
fseek()函数 调用形式:fseek(文件指针,位移量,起始点);
2)随机读写函数
fwrite() 调用形式: fwrite(buffer,size,count,fp); 意义:以buffer为首地址,连续n个size大小的数据块写入fp所指的文件中。
fread() 调用形式: fread(buffer,size,count,fp);
其中:buffer:是一个指针,是读入数据存放的内存起始地址。
size:要读写的字节数,一般由含sizeof运算符的表达是给出。
count:要进行读写多少个size字节的数据项。
·fwrite()和fread()函数在调用成功时,返回函数值为count(输入/输出数据项个数)的值,如果调用失败(输入/输出出错),则返回0值。
·利用fread()和fwrite()函数还可从二进制文件中读写结构体类型的数据。
eg: struct person
{
char name[20];
char sex;
int age;
float salary;
}teacher;
fwrite(&teacher,sizeof(struct person),1,fp);
小结:
1. C系统把文件当作一个“流”,按字节进行处理。
2. C文件按编码方式分为二进制文件和ASCII文件。
3. 文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。
4. 文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。