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

文章作者 100test 发表时间 2007:03:26 17:30:00
来源 100Test.Com百考试题网


文件的随机读写

前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。 为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个, 即 rewind 函数和fseek函数。

rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍
fseek函数。

fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
其表示方法如表10.2。
起始点    表示符号    数字表示
──────────────────────────
文件首    SEEK—SET    0
当前位置   SEEK—CUR    1
文件末尾   SEEK—END     2
例如:
fseek(fp,100L,0).其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后, 即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。

[例10.8]在学生文件stu list中读出第二个学生的数据。
#inClude
struCt stu
{
Char name[10].
int num.
int age.
Char addr[15].
}boy,*qq.
main()
{
FILE *fp.
Char Ch.
int i=1.
qq=&.boy.
if((fp=fopen("stu_list","rb"))==NULL)
{
printf("Cannot open file strike any key exit!").
getCh().
exit(1).
}
rewind(fp).
fseek(fp,i*sizeof(struCt stu),0).
fread(qq,sizeof(struCt stu),1,fp).
printf("\n\nname\tnumber 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类型的长度, 然后再读出的数据即为第二个学生的数据。



相关文章


链表的C语言实现之单链表的插入运算
计算机二级辅导:链表的c语言实现
二级C语言考试辅导教程
二级C语言考试辅导教程第十章:文件[5]
二级C语言考试辅导教程第十章:文件[4]
二级C语言考试辅导教程第十章:文件[2]
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛