本章设计的知识点
- 文件的读操作
- 文件的定位
- 缓冲文件系统
- 非缓冲文件系统
12 .1文件的简介
12.1.1 缓冲文件的定义形式如下:
FILE *指针名;
通过文件指针可以进行文件的读、写操作
12.1.2 非缓冲文件
缓冲文件是通过文件指针实现对文件的读和写操作的
非缓冲文件是通过操作系统提供的功能实现文件的读和写的操作。
12.2 与文件有关的库函数
12.2.1 文件的打开和关闭函数
fp =fopen(文件名,文件操作方式);
文件的关闭通过fclose()函数实现,其调用形式如下:
FILE *fp;
fclose(fp);
12.2.2 文件的读写函数
1、fputc()函数
调用形式
fputc(c,fp);
功能:将字符c中存储的字符写至fp所指的文件中。
2、fgetc()函数
调用形式:
c= fgetc(fp);
功能:从某一文件中读取一个字符,同时文件打开方式必须为读方式或写方式。
FILE *fp;
fp=fopen("file.txt","r");
c=fgetc(fp);
从file.txt文本文件中读取一个字符,因为位置指针没有赋值,因此读取的是该文件中的第一个字符。fgetc()函数读到文件的末尾,则会返回一个结束符EOF,其值为-1,因此如果想要读取文件中的所有内容。
上一个程序可以改为如下形式:
FILE *fp;
fp=fopen("file.txt","r");
c=fgetc(fp);
while(c!=EOF)
{
putchar(c);
c=fgetc(fp);
}
3、fread()函数
调用形式
fread(buff.size,count,fp);
功能:从文件中读取一个数据块,其中buf为指针类型,表示从文件中读取数据存放的地址,size表示一次读取的字节数,count表示进行多少次的读操作,fp为文件指针,指向要进行操作的文件。
struct st
{
char name[20];
int age;
char sex;
float score;
}s[10];
定义一个结构体数组s,其中包含10个元素,每一个元素都包含姓名、年龄、性别、分数等信息数据
for(i=0;i<10;i++)
fread(&s[i],sizeof(struct st),1,fp);
结构体数组s分别保存了每一个学生的信息,其中&s[i]表示第i个元素的地址,因为fread()函数是将数据写入变量地址中,因此该参数必须为变量的地址。
4、fwrite()函数
调用形式:
fwrite(buff,size,count,fp);
功能:想文件中写入一个数据块,buff为指针类型,表示向文件中写入数据的存储地址,size表示一次写入的字节数,count表示进行多少次操作,fp为文件指针,指向要进行操作的文件。
struct st
{
char name[20];
int age;
char sex;
float score;
}s[10];
上述结构已初始化,要将这10名学生的信息写入文件,
for(i=0;i<10;i++)
fwrite(&s[i],sizeof(struct st),1,fp);
5、fprintf()函数
调用方式
fprintf(文件指针,格式,输出变量名);
功能:对文件进行格式化
fprintf(fp,"%d,%c",n,c);
整型变量n和字符变量c表示按%d,%c的格式写至指针fp所指的文件中。
6、fscanf()函数
调用形式:
fscanf(文件指针,格式,输入变量名);
功能:对文件进行格式化读。
fprint(fp,"%d,%c",&n,&c);
输出是要将二进制转换为字符型式
12.3.1 feof()函数
调用形式:
feof(文件指针);
判断文件指针是否到文件末尾
FILE *fp;
feof(fp);
判断文件是否移动到文件的末尾,若文件指针移动到末尾,则feof()函数的返回值为1,否则该函数的返回值为0.
12.3.2 rewind()函数
调用形式:
rewind(文件指针);
功能:使位置指针重新移动到文件的开头
rewind(fp);
通过调用rewind()函数,使指针fp指向文件的起始位置
fseek()函数和文件随机存取
调用形式:
fseek(文件指针,移动量,起始位置);
功能使位置指针指向固定的位置。
ftell()函数
调用形式:
ftell(文件指针);
功能:用于获取文件指针当前位置,其值为从文件起始处的位移量。
ftell(fp);
用于获取文件指针fp当前的位置。ftell()函数也有返回值,若函数调用出错,则返回值-1,若函数正常调用,则返回文件指针当前的位置。
出错检测函数
ferror()函数
调用形式:
ferror(文件指针);
功能:用于测试调用函数是否出错。
若ferror()函数的返回值为0,则表示没有出错,返回非0,则表示出错。每次调用一个函数时,系统都会生成一个新的ferror()函数值,因此调用函数之后必须通过ferror()函数检测返回值。
clearerr()函数
调用形式:
claarerr(文件指针);
将文件错误标识和文件结束符置0.
clearerr(fp);
若调用一个函数出错,则其返回值为非0值,
通过调用clearerr()函数即可将该值置为0