std:: ftell
|
Определено в заголовочном файле
<cstdio>
|
||
|
long
ftell
(
std::
FILE
*
stream
)
;
|
||
Возвращает текущее значение индикатора позиции в файле для файлового потока
stream
.
Если поток открыт в бинарном режиме, значение, полученное этой функцией, представляет собой количество байт от начала файла.
Если поток открыт в текстовом режиме, значение, возвращаемое этой функцией, не определено и имеет смысл только как входные данные для std::fseek .
Содержание |
Параметры
| stream | - | файловый поток для проверки |
Возвращаемое значение
Индикатор позиции в файле при успехе или - 1L при возникновении ошибки. Также устанавливает errno при ошибке.
Примечания
В Windows,
_ftelli64
может использоваться для работы с файлами размером более 2 ГиБ.
Пример
Демонстрирует работу
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
|
|