一.项目设计知识点——接上一篇
5.为什么选择库函数?什么时候用库函数操作文件?
通过库函数我们可以更好地使用其功能,节省了我们自己写函数的过程,并且对于已经运用成熟的库函数,我们很难写出更加高效的新算法。
库函数对文件的操作
1.文件分类:
通过流进行输入输出:文本文件(存放ASCII码) 和 二进制文件(二进制编码方式)
从用户角度: 普通文件 和 设备文件
文件内容: 源文件,目标文件,可执行文件,头文件,数据文件等
基本操作
文件指针:一个指向文件有关信息的指针,这些信息包括文件名,状态和当前位置,他们保存在一个结构体变量中。该类型为FILE 型。编写程序时可直接使用。
如: FILE *fp; 即fp是指向FILE类型的指针变量。
2.各种函数的使用
打开文件: fopen
函数原型 FILE * fopen(const char *path,cost char *mode)
作用:打开一个文件,返回指向该文件的指针
参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式
注:mode有以下值:
r: 只读 ,文件必须存在
r+: 可读写,必须存在
rb+: 打开二进制文件,可以读写
rt+: 打开文本文件,可读写
w: 只写,文件存在则文件长度清0,文件不存在则建立该文件
w+: 可读写,文件存在则文件长度清0,文件不存在则建立该文件
a: (追加)附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾, EOF符保留
a+: 附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不 保留
wb: 打开二进制文件,只写
wb+: 打开或建立二进制文件,可读写
wt+: 打开或建立文本文件,可读写
at+: 打开文本文件,可读写,写的数据加在文本末尾
ab+: 打开二进制文件,可读写,写的数据加在文件末尾
由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件
返回值:文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存error code(错误代码)
注意:在fopen操作后要进行判断,是否文件打开,文件真正打开了才能进行后面的读或写操作,如有错误要进行错误处理
例:FILE *pfile=fopen(const char *filename,”rb”);
文件的关闭:
fclose(文件指针)
功能:关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
成功返回值为0;否则返回EOF
程序结束之前应关闭所有文件,防止因为没有关闭文件儿造成数据流失。
文件读写:
fputc ch=fputc(ch, fp);
作用:把一个字符写到磁盘文件(fp所指向的文件)中去,ch是要输出的字符,他可以是一个字符常量,也可以是一个字符变量。Fp是文件指针变量。
成功返回的就是输出的字符;失败返回EOF。
Fgetc 函数 ch=fgetc(fp);
作用:从指定的文件(fp所指向的文件)读入一个字符赋给ch,《注意文件必须读或读写的方式打开,当遇到文件结束符返回一个文件结束标志EOF》
fputS函数: fputs(字符串,文件指针); fputs(str , fp);
功能: 指定的文件写入字符串,其中字符串可以是字符串常量,也可以是字符数组名,指 针或变量。
fgets函数: fgets(字符数组名,n,文件指针); fegets(str,sizeof(str),文件指针);
功能: 从指定的文件中读出一个字符串到字符数组中。n表示所得到字符串中字符的个数(包含“\0”)。
fprintf 函数: ch=fprintf(文件类型指针,格式字符串,输出列表);
如:fprintf(fp,“%s”,i);
功能: 将整型变量i的值以“%s”(字符)的格式输出到fp指向的文件中。
fscanf 函数:fscanf(文件类型指针,格式字符串,输入列表);
如:fscanf(fp,“%d”,&i);
功能: 读入fp指向的文件中的i的值。
fread 函数: fread(buffer,size,count,fp);
fread(a,2,3,fp); 从fp指向的文件中每次读两个字节送入实数组a中,连续读3次。
功能: 从fp所指向的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。
fwrite 函数: fwrite(buffer,size,count,fp);
fwrite(a,2,3,fp);将a数组的信息每次读出两个字节到fp所指向的文件中,连续读3次。
文件的定位
Fseek 函数: fseek(文件类型指针,位移量,起始点);
如:Fseek(fp,-20L,1);从当前位置后退20个字节。
作用:重定位文件内部的指针
参数:第一个为文件指针,第二个是指针的偏移量(要求long类型数据,常量表示位移加后缀L),第三个是指针偏移起始位置(0,1,2)
返回值:重定位成功返回0,否则返回非零值
需要注意的是该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我们感兴趣的数据上,重定位主要是这个目的。
rewind 函数: in