ftell, _ftelli64
Получает текущее положение указателя файла.
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
Параметры
- stream
Целевая структура FILE.
Возвращаемое значение
ftell и _ftelli64 возвращают текущее положение файла. Значение, возвращаемое ftell и _ftelli64, не может отражать физическое смещение в байтах для потоков, открытых в текстовом режиме, поскольку текстовый режим вызывает преобразование возврата каретки — перевод строки (CR-LF). Используйте ftell с fseekили_ftelli64с_fseeki64 для возврата к расположениям файлов правильно. При ошибке, ftellи_ftelli64 вызывают обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, эти функции возвращают –1L и set errno одной из двух констант, определенных в ERRNO.H. Константа EBADF означает, что аргумент stream не является допустимым значением указателя файла или не ссылается на открытый файл. EINVAL означает, что недопустимый аргумент stream передан функции. Для устройств, неспособных выполнять поиск (например, терминалы и принтеры), или если stream не ссылается на открытый файл, возвращаемое значение не определено.
Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.
Заметки
Функции ftell и _ftelli64извлекают текущую позицию указателя файла (если есть), связанного с stream*.* Позиция представляется как смещение относительно начала потока.
Обратите внимание, что когда файл открывается для добавления данных, текущее положение в файле определяется последней операцией ввода-вывода, а не тем, где должна произойти запись. Например, если файл открывается для добавления, и последней операцией было чтение, то положением в файле является место, где должна произойти следующая операция чтения, а не следующая операция записи. (Если файл открывается для добавления, позиция в файле перемещается в конец файла до любой операции записи). Если в открытом для добавления файле еще не произошла операция ввода-вывода, то позицией в файле является начало файла.
В текстовом режиме 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
System::IO::FileStream::Position