详解详解C语言中语言中fseek函数和函数和ftell函数的使用方法函数的使用方法
fseek函数:函数:
int fseek(FILE * _File, long _Offset, int _Origin);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位
置,函数返回0。如果执行失败则不改变stream指向的位置,函数返回一个非0值。
超出文件末尾位置,还是返回0。往回偏移超出首位置,还是返回0,小心使用。
第一个参数stream为文件指针。
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移。
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、SEEK_END或SEEK_SET。
SEEK_SET:文件开头
SEEK_CUR:当前位置
SEEK_END:文件结尾
eg:
#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);
}
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("The original data:");
for(j=0;j<N;j++)
{
printf("No:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)
printf("%6.2f",ss[j].score[i]);
printf("");
}