std:: fsetpos
|
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
|
|