ftell, _ftelli64

获取文件指针的当前位置。

long ftell( 
   FILE *stream 
);
__int64 _ftelli64( 
   FILE *stream 
);

参数

  • stream
    目标 FILE 结构。

返回值

ftell 和 _ftelli64 返回当前文件位置。 ,因为文本模式导致支持返回换行符转换, ftell 和 _ftelli64 返回的值可能不会反映在文本模式下打开的流的实际字节偏移量。 使用 ftell 和 fseek或_ftelli64和_fseeki64 正确地返回到文件的位置。 在错误, ftell和_ftelli64 调用无效参数处理程序,如 参数验证所述。 如果执行允许继续,这些功能在 ERRNO.H. 返回 – 1L 并将 errno 到两个常数之一,定义。 EBADF 常数表示 stream 参数不是有效的文件指针值也不引用打开文件。 EINVAL 表示无效 stream 传递给函数。 在计算机上无法胜任查找 (例如位置和打印机),或者,在 stream 不引用打开文件时,返回值是不确定的。

请参见 _doserrno、 errno、 _sys_errlist 和 _sys_nerr 有关这些内容的更多信息以及其他,返回代码。

备注

ftell 和 _ftelli64函数检索文件指针的当前位置 (如果有) 与 stream*。*视区表示为偏移量相对于流的开头。

请注意,当文件仅追加的数据中打开,最后一个 I/O 操作取决于当前文件位置,而不是下编写将出现的位置。 例如,文件,则仅追加中打开,最后一个操作是读取,文件位置为下一个读取操作将开始的位置,不带下编写启动的位置。 (如果文件为追加而打开,文件位置移到文件结尾在所有写入操作之前。)如果 I/O 操作在仅追加的方式打开的文件没有发生,文件位置为文件的开头。

在文本模式下, CTRL+Z 被解释为编码的文件结尾字符。 如果可能在用于读取打开的文档/写入, fopen 和任何相关实例检查 CTRL+Z 在文件末尾并将其移除。 这样做,因为使用 ftell 的组合和 fseek 或 _ftelli64 和 _fseeki64,在按 CTRL+Z 结束的文件内移动可能导致 ftell 或 _ftelli64 在文件末尾附近的不正常运行。

因此此功能锁定调用线程在执行时和是线程安全的。 有关非固定版本,请参见 _ftell_nolock。

要求

功能

必需的头

可选标头

ftell

stdio.h

errno.h

_ftelli64

stdio.h

errno.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

// crt_ftell.c
// This program opens a file named CRT_FTELL.C
// for reading and tries to read 100 characters. It
// then uses ftell to determine the position of the
// file pointer and displays this position.
 

#include <stdio.h>

FILE *stream;

int main( void )
{
   long position;
   char list[100];
   if( fopen_s( &stream, "crt_ftell.c", "rb" ) == 0 )
   {
      // Move the pointer by reading data: 
      fread( list, sizeof( char ), 100, stream );
      // Get position after read: 
      position = ftell( stream );
      printf( "Position after trying to read 100 bytes: %ld\n",
              position );
      fclose( stream );
   }
}
  

.NET Framework 等效项

系统:: IO:: FileStream:: 位置

请参见

参考

流I/O

fopen, _wfopen

fgetpos

fseek, _fseeki64

_lseek, _lseeki64