Namespaces
Variants

std:: fsetpos

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cstdio>
int fsetpos ( std:: FILE * stream, const std:: fpos_t * pos ) ;

Setzt den Dateipositionsindikator und den Multibyte-Parsing-Zustand (falls vorhanden) für den C-Dateistrom stream gemäß dem Wert, auf den pos zeigt.

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

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

Inhaltsverzeichnis

Parameter

stream - Dateistrom, der zu modifizieren ist
pos - Zeiger auf ein fpos_t Objekt, das von std::fgetpos aufgerufen auf einem mit derselben Datei assoziierten Strom erhalten wurde

Rückgabewert

0 bei Erfolg, andernfalls ein Wert ungleich Null. Setzt außerdem bei Fehlschlag errno .

Hinweise

Nach dem Positionieren an einer Nicht-End-Position in einem breiten Stream kann der nächste Aufruf einer Ausgabefunktion den Rest der Datei undefiniert lassen, z.B. durch Ausgeben einer Multibyte-Sequenz mit einer anderen Länge.

Beispiel

#include <cstdio>
#include <cstdlib>
int main()
{
    // Bereite ein Array von Gleitkommawerten vor.
    const int SIZE = 5;
    double A[SIZE] = {1., 2., 3., 4., 5.};
    // Schreibe Array in eine Datei.
    std::FILE * fp = std::fopen("test.bin", "wb");
    std::fwrite(A, sizeof(double), SIZE, fp);
    std::fclose(fp);
    // Lese die Werte in Array B ein.
    double B[SIZE];
    fp = std::fopen("test.bin", "rb");
    std::fpos_t pos;
    if (std::fgetpos(fp, &pos) != 0)      // aktuelle Position: Dateianfang
    {
       std::perror("fgetpos()");
       std::fprintf(stderr, "fgetpos() fehlgeschlagen in Datei %s in Zeile # %d\n",
                    __FILE__, __LINE__-3);
       std::exit(EXIT_FAILURE);
    }
    int ret_code = std::fread(B, sizeof(double), 1, fp);      // einen Wert lesen
    // aktuelle Position: nach dem Lesen eines Werts
    std::printf("%.1f; gelesene Anzahl = %d\n", B[0], ret_code);   // einen Wert und ret_code ausgeben
    if (std::fsetpos(fp, &pos) != 0)   // aktuelle Position auf Dateianfang zurücksetzen
    {
       if (std::ferror(fp))
       {
          std::perror("fsetpos()");
          std::fprintf(stderr, "fsetpos() fehlgeschlagen in Datei %s in Zeile # %d\n",
                       __FILE__, __LINE__-5);
          std::exit(EXIT_FAILURE);
       }
    }
    ret_code = std::fread(B, sizeof(double), 1, fp);         // ersten Wert erneut lesen
    std::printf("%.1f; gelesene Anzahl = %d\n", B[0], ret_code);  // einen Wert und ret_code ausgeben
    std::fclose(fp);
    return EXIT_SUCCESS; 
}

Ausgabe:

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

Siehe auch

ruft die Dateipositionsanzeige ab
(Funktion)
gibt die aktuelle Dateipositionsanzeige zurück
(Funktion)
bewegt die Dateipositionsanzeige zu einer bestimmten Position in einer Datei
(Funktion)
C-Dokumentation für fsetpos