头文件:#include <stdio.h>
ftell() 函数用来获取文件读写指针的当前位置,其原型为:
long ftell(FILE * stream);
【参数】stream 为已打开的文件指针。
【返回值】成功则返回当前的读写位置,失败返回 -1。
对于二进制文件,则返回从文件开头到结尾的字节数。
对于文本文件,返回的数值可能没有实际意义,但仍然可以用来保存当前的读写位置,供 fseek() 函数使用。
在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数fseek()就能非常容易地确定文件的当前位置。
ftell() 经常和 fseek() 一起使用。例如,利用 ftell() 可以方便地获取一个文件的长:
FILE *fp = fopen("demo.txt","rb");
fseek(fp, 0L, SEEK_END);
len =ftell(fp)+1;
首先将文件的位置指针移到文件的末尾,然后调用函数 ftell() 获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。
【实例】在读取文件中的字符时,不断读取文件读写指针的位置。
#include<iostream.h>
#include<stdio.h>
void main(void)
{
FILE* stream;
long l;
float fp;
char s[81];
char c;
stream = fopen("fscanf.txt","w+"); // 打开
if(stream == NULL) // 打开文件失败
{
printf("the file is opeaned error!\n");
}
else //输出信息
{
fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x');
fseek(stream,0L,SEEK_SET); // 定位文件读写指针
fscanf(stream,"%s",s);
printf("%ld\n",ftell(stream));
fscanf(stream,"%ld",&l);
printf("%ld\n",ftell(stream));
fscanf(stream,"%f",&fp);
printf("%ld\n",ftell(stream));
fscanf(stream," %c",&c);
printf("%ld\n",ftell(stream));
fclose(stream); // 关闭
}
}
运行结果:
程序首先是新建一个文件,然后使用 fprintf() 函数写入一些数据,再使用 fseek() 函数把文件的读取写指针定位到文件的开头,开始读取文件数据,此时文件的读/写指针会不断地向后移动,程序每读取一次数据就获取一次文件指针的位置并输出。