入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C语言ftell()函数:获取文件读写指针的当前位置

创建时间:2016-07-16 投稿人: 浏览次数:2867
头文件:#include <stdio.h>

ftell() 函数用来获取文件读写指针的当前位置,其原型为:
    long ftell(FILE * stream);

【参数】stream 为已打开的文件指针。

【返回值】成功则返回当前的读写位置,失败返回 -1。

对于二进制文件,则返回从文件开头到结尾的字节数。

对于文本文件,返回的数值可能没有实际意义,但仍然可以用来保存当前的读写位置,供 fseek() 函数使用

在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。

ftell() 经常和 fseek() 一起使用。例如,利用 ftell() 可以方便地获取一个文件的长:
  1. FILE *fp = fopen("demo.txt","rb");  
  2. fseek(fp, 0L, SEEK_END);
  3. len =ftell(fp)+1;
首先将文件的位置指针移到文件的末尾,然后调用函数 ftell() 获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。

【实例】在读取文件中的字符时,不断读取文件读写指针的位置。
  1. #include<iostream.h>
  2. #include<stdio.h>
  3. void main(void)
  4. {
  5. FILE* stream;
  6. long l;
  7. float fp;
  8. char s[81];
  9. char c;
  10. stream = fopen("fscanf.txt","w+"); // 打开
  11. if(stream == NULL) // 打开文件失败
  12. {
  13. printf("the file is opeaned error! ");
  14. }
  15. else //输出信息
  16. {
  17. fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,"x");
  18. fseek(stream,0L,SEEK_SET); // 定位文件读写指针
  19. fscanf(stream,"%s",s);
  20. printf("%ld ",ftell(stream));
  21. fscanf(stream,"%ld",&l);
  22. printf("%ld ",ftell(stream));
  23. fscanf(stream,"%f",&fp);
  24. printf("%ld ",ftell(stream));
  25. fscanf(stream," %c",&c);
  26. printf("%ld ",ftell(stream));
  27. fclose(stream); // 关闭
  28. }
  29. }
运行结果:
8
13
22
24

程序首先是新建一个文件,然后使用 fprintf() 函数写入一些数据,再使用 fseek() 函数把文件的读取写指针定位到文件的开头,开始读取文件数据,此时文件的读/写指针会不断地向后移动,程序每读取一次数据就获取一次文件指针的位置并输出。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。