Namensräume
Varianten
Aktionen

std::fsetpos

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
fsetpos
Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <cstdio>
int fsetpos( std::FILE* stream, const std::fpos_t* pos );

Setzt den Dateipositionsindikator und den Multibyte-Analysezustand (falls vorhanden) für den C-Dateistream stream gemäß dem von pos dargestellten Wert.

Neben der Festlegung des neuen Analysezustands und der Position macht ein Aufruf dieser Funktion die Auswirkungen von std::ungetc rückgängig und löscht den End-of-File-Status, falls dieser gesetzt ist.

Wenn ein Lese- oder Schreibfehler auftritt, wird der Fehlerindikator (std::ferror) für den Stream gesetzt.

Inhalt

[edit] Parameter

stream - Dateistream, der modifiziert werden soll
pos - Zeiger auf ein fpos_t Objekt, das von std::fgetpos erhalten wurde, aufgerufen auf einem Stream, der mit derselben Datei verknüpft ist.

[edit] Rückgabewert

0 bei Erfolg, ein Wert ungleich Null bei einem Fehler. Setzt außerdem errno im Fehlerfall.

[edit] Hinweise

Nach dem Springen zu einer Nicht-Ende-Position in einem breiten Stream kann der nächste Aufruf einer beliebigen Ausgabefunktion den Rest der Datei undefiniert machen, z. B. durch die Ausgabe einer Mehrbyte-Sequenz mit anderer Länge.

[edit] Beispiel

#include <cstdio>
#include <cstdlib>
 
int main()
{
    // Prepare an array of floating-point values.
    const int SIZE = 5;
    double A[SIZE] = {1., 2., 3., 4., 5.};
    // Write array to a file.
    std::FILE * fp = std::fopen("test.bin", "wb");
    std::fwrite(A, sizeof(double), SIZE, fp);
    std::fclose(fp);
 
    // Read the values into array B.
    double B[SIZE];
    fp = std::fopen("test.bin", "rb");
    std::fpos_t pos;
    if (std::fgetpos(fp, &pos) != 0)      // current position: start of file
    {
       std::perror("fgetpos()");
       std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n",
                    __FILE__, __LINE__-3);
       std::exit(EXIT_FAILURE);
    }
 
    int ret_code = std::fread(B, sizeof(double), 1, fp);      // read one value
    // current position: after reading one value
    std::printf("%.1f; read count = %d\n", B[0], ret_code);   // print one value and ret_code
 
    if (std::fsetpos(fp, &pos) != 0)   // reset current position to start of file
    {
       if (std::ferror(fp))
       {
          std::perror("fsetpos()");
          std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n",
                       __FILE__, __LINE__-5);
          std::exit(EXIT_FAILURE);
       }
    }
 
    ret_code = std::fread(B, sizeof(double), 1, fp);         // re-read first value
    std::printf("%.1f; read count = %d\n", B[0], ret_code);  // print one value and ret_code
    std::fclose(fp);
 
    return EXIT_SUCCESS; 
}

Ausgabe

1.0; read count = 1
1.0; read count = 1

[edit] Siehe auch

holt den Dateipositionierungsindikator
(function) [bearbeiten]
gibt den aktuellen Dateipositionierungsindikator zurück
(function) [bearbeiten]
verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei
(function) [bearbeiten]
C-Dokumentation für fsetpos