fseek函数
的有关信息介绍如下:

fseek函数: int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。 如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。 实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。 fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。 功能: 重定位流(数据流/文件)上的文件内部位置指针。 注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。 程序例: #include long filesize(FILE*stream); int main(void) { FILE *stream; stream=fopen("MYFILE.TXT","w+"); 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);把文件内部指针移动到离文件开头100字节处; fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处; fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。 使用实例: #include #defineN5 typedefstructstudent{ longsno; charname[10]; floatscore[3]; }STU; voidfun(char*filename,STUn) { FILE*fp; fp=fopen(filename,"rb+"); fseek(fp,-1L*sizeof(STU),SEEK_END); fwrite(&n,sizeof(STU),1,fp); fclose(fp); } voidmain()/*修改覆盖最后一个学生数据*/ { STUt[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}}; STUn={10006,"ZhaoSi",55,70,68},ss[N]; inti,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("\nTheoriginaldata:\n\n"); for(j=0;j