Partage via


fseek, _fseeki64

Déplace le pointeur de fichier vers un emplacement spécifié.

Syntaxe

int fseek(
   FILE *stream,
   long offset,
   int origin
);
int _fseeki64(
   FILE *stream,
   __int64 offset,
   int origin
);

Paramètres

stream
Pointeur vers la structure FILE .

offset
Nombre d’octets à partir de origin.

origin
Position initiale.

Valeur retournée

En cas de réussite, fseek et _fseeki64 retournent 0. Sinon, elles retournent une valeur différente de zéro. Sur les appareils incapables de rechercher, la valeur de retour n’est pas définie. S’il stream s’agit d’un pointeur Null ou s’il origin n’est pas l’une des valeurs autorisées décrites ci-dessous, fseek et _fseeki64 appelez le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions définissent errno avec la valeur EINVAL et retournent -1.

Notes

Les fseek fonctions déplacent _fseeki64 le pointeur de fichier (le cas échéant) associé stream à un nouvel emplacement à offset partir duquel sont des originoctets. L’opération suivante sur le flux a lieu au nouvel emplacement. Sur un flux ouvert pour la mise à jour, l’opération suivante peut être une lecture ou une écriture. L’argument origin doit être l’une des constantes suivantes, définies dans STDIO.H:

valeur d’origine Signification
SEEK_CUR Position actuelle du pointeur de fichier.
SEEK_END Fin du 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 du fichier. fseek efface _fseeki64 l’indicateur de fin de fichier et annule l’effet des appels précédents ungetc contre stream.

Quand un fichier est ouvert pour un ajout de données, la position de fichier actuelle est déterminée par la dernière opération d’E/S, pas par l’emplacement auquel l’écriture suivante se produirait. Si aucune opération d’E/S ne s’est produite sur un fichier ouvert pour un ajout, la position de fichier correspond au début du fichier.

Pour les flux ouverts en mode texte et _fseeki64 fseek ont une utilisation limitée, car les traductions de flux de retour chariot peuvent provoquer fseek et _fseeki64 produire des résultats inattendus. Les seules fseek opérations et _fseeki64 les opérations garanties pour fonctionner sur des flux ouverts en mode texte sont les suivantes :

  • Recherche avec un décalage de 0 par rapport à toute valeur d’origine.

  • Recherche à partir du début du fichier avec une valeur de décalage retournée par un appel lors ftell de l’utilisation fseek ou _ftelli64 lors de l’utilisation _fseeki64.

Également en mode texte, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée. Dans les fichiers ouverts en lecture/écriture, fopen et toutes les routines connexes recherchent un Ctrl+Z à la fin du fichier et le suppriment, si possible. Elle est supprimée, car l’utilisation de la combinaison et fseek ftell ou _fseeki64 , _ftelli64pour se déplacer dans un fichier qui se termine par une touche Ctrl+Z, peut entraîner fseek ou _fseeki64 se comporter de manière incorrecte près de la fin du fichier.

Lorsque le CRT ouvre un fichier commençant par une marque d’ordre d’octets (BOM), le pointeur de fichier est positionné après le boM. (Autrement dit, il est positionné au début du contenu réel du fichier). Si vous devez fseek accéder au début du fichier, utilisez-le ftell pour obtenir la position initiale, puis fseek vers cette position plutôt que pour la position 0.

Cette fonction verrouille les autres threads pendant l’exécution et est donc thread-safe. Pour obtenir une version non verrouillée, consultez _fseek_nolock, _fseeki64_nolock.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Fonction En-tête requis
fseek <stdio.h>
_fseeki64 <stdio.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

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 );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.

Voir aussi

E/S de flux
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rewind