ftell函数:获取文件位置指示器
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
if((fp = fopen("hello.txt", "w")) == NULL)
{
printf("文件打开失败!\n");
exit(EXIT_FAILURE);
}
printf("%ld\n", ftell(fp));
fputc('F', fp);
printf("%ld\n", ftell(fp)); //这里使用%ld;
fputs("dada\n", fp);
printf("%ld\n", ftell(fp));
fclose(fp);
return 0;
}
rewind函数:修改文件指示器位置,把当前文件指示器初始化为零、文件头
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp;
if((fp = fopen("hello.txt", "w")) == NULL)
{
printf("文件打开失败!\n");
exit(EXIT_FAILURE);
}
printf("%ld\n", ftell(fp));
fputc('F', fp);
printf("%ld\n", ftell(fp));
fputs("dada\n", fp);
printf("%ld\n", ftell(fp));
rewind(fp);
printf("%ld\n", ftell(fp)); //文件位置初始到0
fputs("yuyu\n", fp); //从零重新写入,覆盖原有的值 ,不会把原有的东西往后挤
printf("%ld\n", ftell(fp)); //文件指示器为6;
fclose(fp);
return 0;
}
fseek函数:指定文件位置
#include<stdio.h>
#include<stdlib.h>
#define N 4
struct Stu
{
char name[40];
int num;
float score;
}stu[N], sb;
int main(void)
{
FILE *fp;
int i;
if((fp = fopen("score.txt", "wb")) == NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE);
}
//创建一个文件并加以判断
printf("请开始录入成绩(格式:姓名 学号 成绩)\n");
for(i = 0; i < N; i++)
{
scanf("%s %d %f", stu[i].name, &stu[i].num, &stu[i].score);
}
//录入学生成绩
fwrite(stu, sizeof(struct Stu), N, fp); //数据写入文件
fclose(fp); //这里必须关闭文件,才能将数据写进去
if((fp = fopen("score.txt", "r")) == NULL) //重新打开文件
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE);
}
fseek(fp, sizeof(struct Stu), SEEK_SET);
fread(&sb, sizeof(struct Stu), 1, fp); //将第二名同学的成绩读入到sb结构体中来
printf("%s(%d)的成绩是:%.2f\n", sb.name, sb.num, sb.score);
fclose(fp);
return 0;
}