二级C语言考试辅导教程第十章:文件[5]

二级C语言考试辅导教程第十章:文件[5],第1张

二级C语言考试辅导教程第十章:文件[5],第2张

文件的随机读写
前面介绍的文件的读写方式都是顺序读写,即读写文件只能从头开始,所有数据都可以顺序读写。但在实际问题中,往往要求只读写文件的指定部分。为了解决这个问题,可以将文件内部的位置指针移动到需要读写的位置,然后读写。这种读写叫做随机读写。随机读写的关键是按要求移动位置指针,这叫文件定位。定位文件内部位置的指针主要有两个函数,即rewind函数和fseek函数。

rewind函数以前用过很多次,它的调用形式是:rewind(文件指针);它的功能是将文件内的位置指针移动到文件的开头。下面主要介绍
fseek函数。

fseek函数用于移动文件的内部位置指针,其调用形式为fseek(文件指针,位移,起点);其中:“文件指针”指向被移动的文件。“位移量”表示移动的字节数,要求位移量为长数据,这样文件长度大于64KB时不会出错。当位移用常数表示时,后缀“L”是必需的。“起点”表示从哪里开始计算位移。有三个指定的起始点:文件的开头、当前位置和文件的结尾。
其表示方法如表10.2所示。
起点表示符号编号
——————————————
文件seek-set0
的当前位置seek-cur1
它的意义是将位置指针移动到文件的前100个字节。还应该注意,fseek函数通常用于二进制文件。在文本文件中,由于转换的原因,计算出的位置经常会出现错误。在移动位置指针之后,可以通过使用上述任何读和写功能来完成文件的随机读和写。一般来说就是读写一个数据块,所以常用fread和fwrite函数。下面的例子用来说明文件的随机读写。

【例10.8】读出学生档案stu列表中第二个学生的数据。
# inClude
struCt stu
{
Char name[10];
int num;
int age;
Char addr[15];
}男生,* qq
main()
{
FILE * FP;
Char Ch;
int I = 1;
QQ = & boy;
if((fp=fopen("stu_list "," Rb "))= = NULL)
{
printf("无法打开文件按任意键退出!");
getCh();
退出(1);
}
倒带(FP);
fseek(fp,i*sizeof(struCt stu),0);
fread(qq,sizeof(struCt stu),1,FP);
printf(" \ n \ n name \ t number age addr \ n ");
printf("%s\t] } %s\n ",qq->name,qq->num,qq->age,
QQ-> addr);
}来源:www.examda.com
文件stu_list已经由例10.6的程序建立,通过随机读取的方式读取第二个学生的数据。在程序中,boy被定义为stu类型变量,qq是指向boy的指针。通过读取二进制文件打开文件,并将文件位置指针移动到程序的第22行。其中I的值为1,表示从文件开头移动一个stu类型的长度后读出的数据是第二个学生的数据。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 二级C语言考试辅导教程第十章:文件[5]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情