Namespaces
Variants

std:: fsetpos

From cppreference.net
< cpp ‎ | io ‎ | c
Défini dans l'en-tête <cstdio>
int fsetpos ( std:: FILE * stream, const std:: fpos_t * pos ) ;

Définit l'indicateur de position du fichier et l'état d'analyse multioctet (le cas échéant) pour le flux de fichier C stream selon la valeur pointée par pos .

En plus d'établir un nouvel état d'analyse et une nouvelle position, un appel à cette fonction annule les effets de std::ungetc et efface l'état de fin de fichier, s'il est défini.

Si une erreur de lecture ou d'écriture se produit, l'indicateur d'erreur ( std::ferror ) du flux est défini.

Table des matières

Paramètres

stream - flux de fichier à modifier
pos - pointeur vers un objet fpos_t obtenu depuis std::fgetpos appelé sur un flux associé au même fichier

Valeur de retour

0 en cas de succès, valeur non nulle sinon. Définit également errno en cas d'échec.

Notes

Après s'être positionné à une position non finale dans un flux large, le prochain appel à toute fonction de sortie peut rendre le reste du fichier indéfini, par exemple en produisant une séquence multioctet de longueur différente.

Exemple

#include <cstdio>
#include <cstdlib>
int main()
{
    // Préparer un tableau de valeurs à virgule flottante.
    const int SIZE = 5;
    double A[SIZE] = {1., 2., 3., 4., 5.};
    // Écrire le tableau dans un fichier.
    std::FILE * fp = std::fopen("test.bin", "wb");
    std::fwrite(A, sizeof(double), SIZE, fp);
    std::fclose(fp);
    // Lire les valeurs dans le tableau B.
    double B[SIZE];
    fp = std::fopen("test.bin", "rb");
    std::fpos_t pos;
    if (std::fgetpos(fp, &pos) != 0)      // position actuelle : début du fichier
    {
       std::perror("fgetpos()");
       std::fprintf(stderr, "fgetpos() a échoué dans le fichier %s à la ligne # %d\n",
                    __FILE__, __LINE__-3);
       std::exit(EXIT_FAILURE);
    }
    int ret_code = std::fread(B, sizeof(double), 1, fp);      // lire une valeur
    // position actuelle : après lecture d'une valeur
    std::printf("%.1f; compteur de lecture = %d\n", B[0], ret_code);   // afficher une valeur et ret_code
    if (std::fsetpos(fp, &pos) != 0)   // réinitialiser la position actuelle au début du fichier
    {
       if (std::ferror(fp))
       {
          std::perror("fsetpos()");
          std::fprintf(stderr, "fsetpos() a échoué dans le fichier %s à la ligne # %d\n",
                       __FILE__, __LINE__-5);
          std::exit(EXIT_FAILURE);
       }
    }
    ret_code = std::fread(B, sizeof(double), 1, fp);         // relire la première valeur
    std::printf("%.1f; compteur de lecture = %d\n", B[0], ret_code);  // afficher une valeur et ret_code
    std::fclose(fp);
    return EXIT_SUCCESS; 
}

Sortie :

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

Voir aussi

obtient l'indicateur de position du fichier
(fonction)
retourne l'indicateur de position actuel du fichier
(fonction)
déplace l'indicateur de position du fichier vers un emplacement spécifique
(fonction)
Documentation C pour fsetpos