文件的定位
1. rewind函数
rewind函数可以强制使当前工作指针指向文件的开头。一般在要重新从头读写文件时使用。如下例,在读了文件dfr.dat一遍送显示器后,文件的位置指针已移到文件的最后,为了重新读一遍再写到文件dfw.dat中,必须先执行一次rewind函数,才能正确读出。
例1 将已建好的文件dfr.dat的内容顺序读一遍送显示器, 再读一遍复制到文件dfw.dat中。
#include<stdio.h>
main( )
{ int i;
char ch;
float f, f1;
FILE *fp1, *fp2;
if((fp1=fopen("dfr.dat", "r"))==NULL)
{ printf("Can not open the file for reading\n");
exit(0);
}
if((fp2=fopen("dfw.dat", "w"))==NULL)
{printf("Can not open the file for writing\n");
exit(0);
}
fscanf(fp1, "%c %d %f", &ch, &i, &f);
printf("%c, %5d, %4.1f\n", ch, i, f);
rewind(fp1);
fscanf(fp1, "%c %d %f", &ch, &i, &f1);
fprintf(fp2, "%c %d %f", ch, i, f1);
fclose(fp1);
fclose(fp2);
}
2. fseek函数
利用fseek函数可以控制文件位置的指针进行随机读写。
fseek函数的调用形式为 fseek(文件类型指针, 位移量, 起始点);
起始点用0、1 或2 代表, 0——文件的开始, 1——当前位置, 2——文件末尾;
位移量指从起始点向前移动的字节数;
fseek函数一般用于二进制文件, 因为文本文件要发生字符转换,计算位置时容易发生混乱。
例 1 将例10.3形成的职工数据文件中的第1,3,5个工人的信息读出、 送显。
#include<stdio.h>
#define SIZE 6
struct staff
{ char name[10];
int salary;
int cost;
} worker[SIZE];
main()
{ FILE *fp;
int i;
if((fp=fopen("work.dat", "rb"))==NULL)
{printf("Can not open the file\n");
exit(0);
}
for(i=0; i<SIZE; i++, i++)
{fseek(fp, i*sizeof(struct staff), 0);
fread(&worker[i], sizeof(struct staff), 1, fp);
printf(" %s %d %d\n", worker[i].name, worker[i].salary, worker[i].cost);
}
fclose(fp);
}
若形成work.dat文件时的输入数据为
Li1 1100 100
Li2 1200 200
Li3 1300 300
Li4 1400 400
Li5 1500 500
Li6 1600 600
则此程序的运行结果为
Li1 1100 100
Li3 1300 300
Li5 1500 500
3. ftell函数
ftell函数的作用是得到流式文件中位置指针的当前位置, 用相对于文件开头的位移量来表示。
由于文件的位置指针经常移动,往往不易搞清其当前位置,用ftell()函数可以返回其当前位置,若返回-1L,表示函数调用出错。 例如,
i=ftell(fp);
if(i==-1L)printf("error\n");
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69914734/viewspace-2654747/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69914734/viewspace-2654747/