zoukankan      html  css  js  c++  java
  • 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范例的长度, 然后再读出的数据即为第二个门生的数据。




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

  • 相关阅读:
    ORACLE中dba,user,v$等开头的常用表和视图
    rman restore spfile from backup
    oracle11g设置归档模式和非归档模式
    Oracle数据文件改名
    Linux下rz/sz安装及使用方法
    oracle数据库rman备份计划及恢复
    高级数据查询SQL语法
    关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
    关系数据库常用SQL语句语法大全
    微服务化的基石——持续集成【转】
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975562.html
Copyright © 2011-2022 走看看