zoukankan      html  css  js  c++  java
  • 文件流之文件的定位

      使用文件流时,文件中有一个指针标志文件当前的读写位置。读写一个字符后,文件的位置指针会向后移动到下一个字符的位置。有时候,程序需要从文件的不同位置“跳跃”地读取字符,这时就要用到相关的函数。

    文件指针,即指向文件的指针。关于利用文件指针进行文件读写可以看我上篇博客:https://www.cnblogs.com/kaml8/p/9786364.html

    1.rewind()函数

    格式:rewind(文件指针)

    如:rewind(fp)

    功能:将文件的位置指针重新定义在文件的开头。

    示例代码:

     1 #include <stdio.h>
     2 int main()
     3 {
     4     FILE *fin,*fout;//定义文件指针 
     5     int i;
     6     float t;
     7     fin=fopen("in.txt","r");
     8     fout=fopen("out.txt","w");
     9     fscanf(fin,"%d %f",&i,&t);
    10     fprintf(fout,"%d %6.2f",i,t);
    11     rewind(fin);//将fin指向文件的位置指针重置到开头 
    12     fscanf(fin,"%d %f",&i,&t);//第二次进行读取 
    13     fprintf(fout,"%d %6.2f",i,t);//第二次进行输出 
    14     fclose(fin);//关闭输入文件 
    15     fclose(fout);//关闭输出文件 
    16     
    17     return 0;
    18 }

    运行结果:

    可见i和t的值被两次写入到out.txt中。

    2.fseek()函数

    格式:fseek(文件指针,位移量,起始点)

    如:fseek(fp,4L,1)  //将fp指向文件的位置指针从当前位置向前移动4个字节

    功能:按一定规则改变文件的位置指针。

    说明: a)位移量表示从起始点向前移动的字节数,一般要求是long型,如100L。

        b)起始点取值{0,1,2},0表示文件开头,1表示当前位置,2表示文件末尾;起始点为2时的位移量一般为负数,表示向后移动。

        c)C环境下,一般int型和float型为4字节,char型为1字节,double型为8字节。

    示例代码:

     1 #include <stdio.h>
     2 int main()
     3 {
     4     FILE *fin,*fout;//定义文件指针 
     5     int i;
     6     float t;
     7     fin=fopen("in.txt","r");
     8     fout=fopen("out.txt","w");
     9     fscanf(fin,"%d %f",&i,&t);
    10     fprintf(fout,"%d %6.2f",i,t);
    11     fseek(fin,4L,1);//将fin指向文件的位置指针从当前位置向前移动4个字节 
    12     fscanf(fin,"%d %f",&i,&t);//第二次进行读取 
    13     fprintf(fout,"%d %6.2f",i,t);//第二次进行输出 
    14     fclose(fin);//关闭输入文件 
    15     fclose(fout);//关闭输出文件 
    16     
    17     return 0;
    18 }

    运行结果:

    可以看出,输出363和73.58后,位置指针从当前位置73.58向前4个字节,即向前一个整型或浮点型长度,再次读写,将8和356.12写入到out.txt中。

    3.feof函数

    格式:feof(文件指针)

    如:feof(fp)  //判断fp指向的文件的位置指针是否到达文件末尾

    功能:判断位置指针是否到达文件末尾,是则返回真(非0),否则为假(0)。

    示例:

    rewind(fp);
    fprintf(feof(fp));

    输出值为0,因为rewind()函数将位置指针重置到开头了。

    同样地,这几个函数也可以嵌入到循环语句中,因为其运用时要注意的细节较多,使用时一定要小心谨慎。

  • 相关阅读:
    20 模块之 re subprocess
    19 模块之shelve xml haslib configparser
    18 包 ,logging模块使用
    vue项目的搭建使用
    课程模块表结构
    DRF分页组件
    Django ContentType组件
    跨域
    解析器和渲染器
    DRF 权限 频率
  • 原文地址:https://www.cnblogs.com/kaml8/p/9786605.html
Copyright © 2011-2022 走看看