C说话教程第十章:文件(7)


文件的随机读写

  前面引见的对文件的读写体式花式都是按次读写, 即读写文件只能从头最先,按次读写各个数据。 但在理想成就中常要求只读写文件中某一指定的部门。 为了谋划这个成就可移动文件外部的地位指针到需求读写的地位,再停止读写,这种读写称为随机读写。 完成随机读写的关键是要按要求移动地位指针,这称为文件的定位。文件定位移动文件外部地位指针的函数次要有两个, 即 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<stdio.h>
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);
}
  文件stu_list已由例10.6的法度成立,本法度用随机读出的设施读出第二个门生的数据。法度中定义boy为stu范例变量,qq为指向boy的指针。以读二进制文件体式花式掀开文件,法度第22行移动文件地位指针。其中的i值为1,透露表现从文件头最先,移动一个stu范例的长度, 然后再读出的数据即为第二个门生的数据。




版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始出处 、作者信息和本声明。不然将深究司法责任。

posted @ 2011-03-07 18:40  蓝色的天空III  阅读(142)  评论(0编辑  收藏  举报