每天進步一點點-->函數fseek() 用法


在閱讀代碼時,遇到了很早之前用過的fseek(),很久沒有用了,有點陌生,寫出來以便下次查閱。

函數功能是把文件指針指向文件的開頭,需要包含頭文件stdio.h

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



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM