std::ftell
Объявлено в заголовочном файле <cstdio> | ||
|---|---|---|
long ftell( std::FILE* stream ); |
Возвращает текущее значение индикатора позиции файла для файлового потока stream.
Если поток открыт в двоичном режиме, значение, полученное этой функцией, представляет собой количество байтов от начала файла.
Если поток открыт в текстовом режиме, возвращаемое этой функцией значение не определено и имеет смысл только в качестве входных данных для std::fseek.
Параметры
| stream | - | файловый поток для проверки |
Возвращаемое значение
Индикатор позиции файла в случае успеха или -1L в случае ошибки. При ошибке также устанавливает errno.
Примечания
В Windows для работы с файлами размером более 2 ГиБ можно использовать _ftelli64.
Пример
Демонстрирует использование std::ftell() с проверкой ошибок. Записывает, а затем считывает несколько значений с плавающей точкой (FP) из файла и в файл.
#include <cstdio>
#include <cstdlib>
#include <iostream>
// If the condition is not met then exit the program with error message.
void check(bool condition, const char* func, int line)
{
if (condition)
return;
std::perror(func);
std::cerr << func << " failed in file " << __FILE__ << " at line # " << line - 1
<< '\n';
std::exit(EXIT_FAILURE);
}
int main()
{
// Prepare an array of FP values.
constexpr int SIZE {5};
double A[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};
// Write array to a file.
const char* fname = "/tmp/test.bin";
FILE* file = std::fopen(fname, "wb");
check(file != NULL, "fopen()", __LINE__);
const int write_count = std::fwrite(A, sizeof(double), SIZE, file);
check(write_count == SIZE, "fwrite()", __LINE__);
std::fclose(file);
// Read the FP values into array B.
double B[SIZE];
file = std::fopen(fname, "rb");
check(file != NULL, "fopen()", __LINE__);
long pos = std::ftell(file); // position indicator at start of file
check(pos != -1L, "ftell()", __LINE__);
std::cout << "pos: " << pos << '\n';
const int read_count = std::fread(B, sizeof(double), 1, file); // read one FP value
check(read_count == 1, "fread()", __LINE__);
pos = std::ftell(file); // position indicator after reading one FP value
check(pos != -1L, "ftell()", __LINE__);
std::cout << "pos: " << pos << '\n';
std::cout << "B[0]: " << B[0] << '\n'; // print one FP value
return EXIT_SUCCESS;
}
Возможный вывод:
pos: 0 pos: 8 B[0]: 1.1
См. также
| получает индикатор позиции файла (функция) |
|
| перемещает индикатор позиции файла в заданное место файла (функция) |
|
| перемещает индикатор позиции файла в заданное место файла (функция) |
|
| возвращает индикатор позиции ввода (открытая функция-член класса std::basic_istream<CharT,Traits>) |
|
| возвращает индикатор позиции вывода (открытая функция-член класса std::basic_ostream<CharT,Traits>) |
|
Документация по C для ftell |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/ftell