Namespaces
Variants

std:: ftell

From cppreference.net
< cpp ‎ | io ‎ | c
Défini dans l'en-tête <cstdio>
long ftell ( std:: FILE * stream ) ;

Retourne la valeur actuelle de l'indicateur de position du fichier pour le flux de fichier stream .

Si le flux est ouvert en mode binaire, la valeur obtenue par cette fonction est le nombre d'octets depuis le début du fichier.

Si le flux est ouvert en mode texte, la valeur retournée par cette fonction est non spécifiée et n'a de sens que comme entrée pour std::fseek .

Table des matières

Paramètres

stream - flux de fichier à examiner

Valeur de retour

Indicateur de position du fichier en cas de succès ou - 1L en cas d'échec. Définit également errno en cas d'échec.

Notes

Sur Windows, _ftelli64 peut être utilisé pour travailler avec des fichiers de plus de 2 Gio.

Exemple

Illustre l'utilisation de std::ftell() avec vérification des erreurs. Écrit puis lit quelques valeurs à virgule flottante (FP) depuis/dans un fichier.

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

Sortie possible :

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

Voir aussi

obtient l'indicateur de position du fichier
(fonction)
déplace l'indicateur de position du fichier vers un emplacement spécifique
(fonction)
déplace l'indicateur de position du fichier vers un emplacement spécifique
(fonction)
retourne l'indicateur de position d'entrée
(fonction membre publique de std::basic_istream<CharT,Traits> )
retourne l'indicateur de position de sortie
(fonction membre publique de std::basic_ostream<CharT,Traits> )