C 参考手册

定义于头文件 <stdio.h>
long ftell( FILE *stream );

返回流 stream 的文件位置指示器。

若流以二进制模式打开,则由此函数获得的值是从文件开始的字节数。

若流以文本模式打开,则由此函数返回的值未指定,且仅若作为 fseek() 的输入才有意义。

参数

stream - 要检验的文件流

返回值

成功时为文件位置指示器,若失败发生则为 -1L

失败时,设 errno 对象为实现定义的正值。

示例

ftell带错误检查

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    /* 准备浮点值的数组。 */
    #define SIZE 5
    double A[SIZE] = {1.,2.,3.,4.,5.};
    /* 写数组到文件。 */
    FILE * fp = fopen("test.bin", "wb");
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
 
    /* 读取浮点值到数组 B。 */
    double B[SIZE];
    fp = fopen("test.bin","rb");
    long int pos = ftell(fp);   /* 位置指示器在文件起始 */
    if (pos == -1L)
    {
       perror("ftell()");
       fprintf(stderr,"ftell() failed in file %s at line # %d\n", __FILE__,__LINE__-4);
       exit(EXIT_FAILURE);
    }
    printf("%ld\n", pos);
 
    int ret_code = fread(B,sizeof(double),1,fp);   /* 读取一个浮点值 */
    pos = ftell(fp);   /* 读取一个浮点值后的位置指示器 */
    if (pos == -1L)
    {
       perror("ftell()");
       fprintf(stderr,"ftell() failed in file %s at line # %d\n", __FILE__,__LINE__-4);
       exit(EXIT_FAILURE);
    }
    printf("%ld\n", pos);
    printf("%.1f\n", B[0]);   /* 打印浮点值 */
 
    return EXIT_SUCCESS; 
}

输出:

0
8
1.0

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.9.4 The ftell function (p: 337-338)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.9.4 The ftell function (p: 303-304)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.9.4 The ftell function

参阅

获取文件位置指示器
(函数)
将文件位置指示符移动到文件中的指定位置
(函数)
将文件位置指示器移动到文件中的指定位置
(函数)