Namensräume
Varianten
Aktionen

std::ftell

Von cppreference.com
< cpp‎ | io‎ | c
 
 
 
C-Style I/O
Typen und Objekte
Funktionen
Datei-Zugriff
Direkte Ein-/Ausgabe
Unformatierte Ein-/Ausgabe
Formatierte Eingabe
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
Formatierte Ausgabe
Dateipositionierung
ftell
Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <cstdio>
long ftell( std::FILE* stream );

Gibt den aktuellen Wert des Dateipositionsindikators für den Dateistream 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 nicht spezifiziert und nur als Eingabe für std::fseek sinnvoll.

Inhalt

[bearbeiten] Parameter

stream - zu untersuchender Dateistream

[bearbeiten] Rückgabewert

Datei-Positionsindikator bei Erfolg oder -1L bei Fehlschlag. Setzt auch errno bei Fehlschlag.

[bearbeiten] Hinweise

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

[bearbeiten] Beispiel

Demonstriert std::ftell() mit Fehlerprüfung. Schreibt dann einige Gleitkommazahlen (FP) in/aus einer Datei und liest sie.

#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

[bearbeiten] Siehe auch

holt den Dateipositionierungsindikator
(function) [bearbeiten]
verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei
(function) [bearbeiten]
verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei
(function) [bearbeiten]
gibt den Eingabepositionsindikator zurück
(public member function of std::basic_istream<CharT,Traits>) [edit]
gibt den Ausgabepositionsindikator zurück
(public member function of std::basic_ostream<CharT,Traits>) [bearbeiten]
C-Dokumentation für ftell