Namespaces
Variants

std:: ftell

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cstdio>
long ftell ( std:: FILE * stream ) ;

Gibt den aktuellen Wert der Dateipositionsanzeige für den Dateistrom stream zurück.

Wenn der Stream im Binärmodus geöffnet ist, ist der von dieser Funktion erhaltene Wert die Anzahl der Bytes vom Anfang der Datei.

Wenn der Stream im Textmodus geöffnet ist, ist der von dieser Funktion zurückgegebene Wert unspezifiziert und nur als Eingabe für std::fseek sinnvoll.

Inhaltsverzeichnis

Parameter

stream - zu untersuchender Dateistrom

Rückgabewert

Dateipositionsanzeiger bei Erfolg oder - 1L bei Fehler. Setzt ebenfalls errno bei Fehlern.

Hinweise

Unter Windows kann _ftelli64 verwendet werden, um mit Dateien größer als 2 GiB zu arbeiten.

Beispiel

Demonstriert die Verwendung von std::ftell() mit Fehlerüberprüfung. Schreibt und liest einige Gleitkommawerte (FP-Werte) von/zu einer Datei.

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

Mögliche Ausgabe:

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

Siehe auch

ruft die Dateipositionsanzeige ab
(Funktion)
bewegt die Dateipositionsanzeige zu einer bestimmten Stelle in einer Datei
(Funktion)
bewegt die Dateipositionsanzeige zu einer bestimmten Stelle in einer Datei
(Funktion)
gibt die Eingabepositionsanzeige zurück
(öffentliche Mitgliedsfunktion von std::basic_istream<CharT,Traits> )
gibt die Ausgabepositionsanzeige zurück
(öffentliche Mitgliedsfunktion von std::basic_ostream<CharT,Traits> )