Namespaces
Variants

std:: ftell

From cppreference.net
< cpp ‎ | io ‎ | c
Definido en el encabezado <cstdio>
long ftell ( std:: FILE * stream ) ;

Devuelve el valor actual del indicador de posición de archivo para el flujo de archivo stream .

Si el flujo está abierto en modo binario, el valor obtenido por esta función es el número de bytes desde el inicio del archivo.

Si el flujo está abierto en modo texto, el valor devuelto por esta función no está especificado y solo es significativo como entrada para std::fseek .

Contenidos

Parámetros

stream - flujo de archivo a examinar

Valor de retorno

Indicador de posición de archivo en caso de éxito o - 1L si ocurre un fallo. También establece errno en caso de fallo.

Notas

En Windows, _ftelli64 puede utilizarse para trabajar con archivos mayores a 2 GiB.

Ejemplo

Demuestra el uso de std::ftell() con verificación de errores. Escribe y luego lee algunos valores de punto flotante (FP) desde/hacia un archivo.

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

Salida posible:

pos: 0
pos: 8
B[0]: 1.1

Véase también

obtiene el indicador de posición del archivo
(función)
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función)
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función)
devuelve el indicador de posición de entrada
(función miembro pública de std::basic_istream<CharT,Traits> )
devuelve el indicador de posición de salida
(función miembro pública de std::basic_ostream<CharT,Traits> )