基本介紹
- 外文名: fseek
- 類型:函式
- 領域:計算機
- 注意:不是定位檔案指針
功 能,頭檔案,用 法,描 述,返回值,程式例,注意事項,
功 能
注意:檔案指針指向檔案/流。位置指針指向檔案內部的位元組位置,隨著檔案的讀取會移動,檔案指針如果不重新賦值將不會改變或指向別的檔案。
頭檔案
#include <stdio.h>
用 法
int fseek(FILE *stream, long offset, int fromwhere);
描 述
函式設定檔案指針stream的位置。如果執行成功,stream將指向以fromwhere(偏移起始位置:檔案頭0(SEEK_SET),當前位置1(SEEK_CUR),檔案尾2(SEEK_END))為基準,偏移offset(指針偏移量)個位元組的位置。如果執行失敗(比如offset超過檔案自身大小),則不改變stream指向的位置。
fseek函式和lseek函式類似,但lseek返回的是一個off_t數值,而fseek返回的是一個整型。
返回值
成功,返回0,失敗返回非0值,並設定error的值,可以用perror()函式輸出錯誤。
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+b");fprintf(stream,"Thisisatest");printf("FilesizeofMYFILE.TXTis%ldbytes\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);把stream指針移動到離檔案開頭100位元組處;
fseek(fp,100L,1);把stream指針移動到離檔案當前位置100位元組處;
fseek(fp,-100L,2);把stream指針退回到離檔案結尾100位元組處。
使用實例:
#include<stdio.h>#define N 5typedef 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);} int 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:%ldName:%-8sScores:",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:%ldName:%-8sScores:",ss[j].sno,ss[j].name); for(i=0;i<3;i++) printf("%6.2f",ss[j].score[i]); printf("\n"); } return 0;}