zoukankan      html  css  js  c++  java
  • (二十二)函数fseek() 用法

    fseek


    函数名: fseek
    功 能: 重定位流上的文件指针
    用 法: int fseek(FILE *stream, long offset, int fromwhere);
    描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字     节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
    返回值: 成功,返回0,否则返回其他值。
    fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.
    程序例:

    #include <stdio.h>
      long filesize(FILE *stream);
      int main(void)
      {
        FILE *stream;
        stream = fopen("MYFILE.TXT", "w+");
        fprintf(stream, "This is a test");
        printf("Filesize of MYFILE.TXT is %ld bytes
    ", filesize(stream));
        fclose(stream);
        return 0;
      }
      long filesize(FILE *stream)
      {
        long curpos, length;
        curpos = ftell(stream);
        fseek(stream, 0L, SEEK_END);
        length = ftell(stream);
        fseek(stream, curpos, SEEK_SET);
        return length;
      }

    int fseek( FILE *stream, long offset, int origin );
    第一个参数stream为文件指针
    第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
    第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
    SEEK_SET: 文件开头
    SEEK_CUR: 当前位置
    SEEK_END: 文件结尾
    其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
    简言之:
    fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
    fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
    fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
    使用实例:

     #include <stdio.h>
      #define N 5
      typedef struct student {
       long sno;
       char name[10];
       float score[3];
      } STU;
      void fun(char *filename, STU n)
      {
       FILE *fp;
       fp = fopen(filename, "rb+");
       fseek(fp, -1L*sizeof(STU),SEEK_END);
      fwrite(&n, sizeof(STU), 1, fp);
      fclose(fp);
      }
      void main()
      {
        STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
        {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87},
        {10005,"ZhangSan", 95, 80, 88}};
        STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
        int i,j; FILE *fp;
        fp = fopen("student.dat", "wb");
        fwrite(t, sizeof(STU), N, fp);
        fclose(fp);
        fp = fopen("student.dat", "rb");
        fread(ss, sizeof(STU), N, fp);
        fclose(fp);
        printf("
    The original data :
    
    ");
        for (j=0; j<N; j++)
        {
         printf("
    No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
         for (i=0; i<3; i++) 

        printf("%6.2f ", ss[j].score[i]);
        printf(" ");
          }
        fun("student.dat", n);
          printf(" The data after modifing : ");
        fp = fopen("student.dat", "rb");
          fread(ss, sizeof(STU), N, fp);
          fclose(fp);
          for (j=0; j<N; j++)
          {
          printf(" No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
          for (i=0; i<3; i++)

          printf("%6.2f ", ss[j].score[i]);
          printf(" ");
        }
    }

  • 相关阅读:
    欧拉公式
    isap的一些想法
    错误合集
    Hello World
    PAT (Advanced Level) Practice 1068 Find More Coins
    PAT (Advanced Level) 1087 All Roads Lead to Rome
    PAT (Advanced Level) 1075 PAT Judge
    PAT (Advanced Level) 1067 Sort with Swap(0, i)
    PAT (Advanced Level) 1017 Queueing at Bank
    PAT (Advanced Level) 1025 PAT Ranking
  • 原文地址:https://www.cnblogs.com/zhangshenghui/p/6425045.html
Copyright © 2011-2022 走看看