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 );
}
}