fseek, _fseeki64
déplace le pointeur de fichier à un emplacement spécifié.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Paramètres
stream
Pointeur vers la structure d' FILE .offset
Nombre d'octets d' origin.origin
Position d'origine.
Valeur de retour
En cas de réussite, fseek et retourne 0 d' _fseeki64 .Sinon, il retourne une valeur différente de zéro.Sur les appareils incapables de recherche, la valeur de retour est pas définie.Si stream est un pointeur null, ou si origin n'est pas l'une des valeurs autorisées décrites ci-dessous, fseek et _fseeki64 appellent le gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, ces errno défini par fonctions à EINVAL et à retourner -1.
Notes
fseek et _fseeki64 fonctions déplace le pointeur de fichier (le cas échéant) associé à stream vers un nouvel emplacement qui est des octets d' offset d' origin*.* L'opération suivante dans le flux de données a lieu au nouvel emplacement.Sur un flux de données ouvert pour la mise à jour, l'opération suivante peut être une lecture ou l'écriture.L'origine de l'argument doit être l'une des constantes suivantes, défini dans STDIO.H :
SEEK_CUR
Position actuelle du pointeur de fichier.SEEK_END
de fin de fichier.SEEK_SET
début du fichier.
Vous pouvez utiliser fseek et _fseeki64 pour repositionner le pointeur n'importe où dans un fichier.Le pointeur peut également être positionné au delà de la fin de le fichier.fseek et _fseeki64désactive l'indicateur de fin de fichier et annule l'effet de tous les appels précédents d' ungetc par rapport à stream.
Lorsqu'un fichier est ouvert pour ajouter des données, la position actuelle dans le fichier est déterminée par la dernière opération d'E/S, pas par l'emplacement où l'écriture suivante se produit.Si aucune opération d'E/S n'est encore eu lieu sur un fichier ouvert pour permettre l'ajout, la position de fichier est le début du fichier.
Pour les flux de données ouverts en mode texte, fseek et _fseeki64ont des utiliser, car les traductions de saut de ligne-retour de chariot peuvent provoquer fseek et _fseeki64des résultats inattendus de produit.Seuls fseek et opérationsd' _fseeki64garanties pour travailler sur des flux de données ouverts en mode texte sont :
Rechercher avec un offset de 0 par rapport à certaines valeurs d'origine.
Rechercher du début du fichier avec une valeur de décalage a retourné par un appel à ftell lors de l'utilisation fseekou _ftelli64lors del'utilisation_fseeki64.
Également en mode texte, CTRL+Z est interprète comme caractère de fin de fichier de l'entrée.Dans les fichiers ouverts pour la lecture/écriture, fopen et le contrôle de routines relatif pour un CTRL+Z à la fin de le fichier et le supprimer si possible.Cette opération est exécutée comme l'utilisation de la combinaison d' fseek et ftellou_fseeki64 et _ftelli64, pour déplacer dans un fichier qui se termine par un CTRL+Z peut entraîner un comportement fseek ou _fseeki64 incorrectement à la fin de le fichier.
Lorsque le CRT ouvre un fichier qui commence par une marque d'ordre d' (BOM)octet, le pointeur de fichier est positionnée après le BOM (autrement dit, au début du contenu réel du fichier).Si vous devez fseek au début du fichier, utilisez ftell de lui obtenir la position d'origine et fseek plutôt que pour positionner 0.
Cette fonction verrouille d'autres threads pendant l'exécution et est donc thread-safe.Pour une version non verrouillante, consultez _fseek_nolock, _fseeki64_nolock.
Configuration requise
Fonction |
en-tête requis |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.
Exemple
// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.
#include <stdio.h>
int main( void )
{
FILE *stream;
char line[81];
int result;
if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
{
printf( "The file fseek.out was not opened\n" );
return -1;
}
fprintf( stream, "The fseek begins here: "
"This is the file 'fseek.out'.\n" );
result = fseek( stream, 23L, SEEK_SET);
if( result )
perror( "Fseek failed" );
else
{
printf( "File pointer is set to middle of first line.\n" );
fgets( line, 80, stream );
printf( "%s", line );
}
fclose( stream );
}