fseek, _fseeki64

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

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 FILE .

offset
Nombre d’octets à partir de origin.

origin
Position initiale.

En cas de réussite, fseek et _fseeki64 renvoie la valeur 0. Sinon, elle retourne une valeur différente de zéro. Sur les périphériques incapables de recherche, la valeur de retour n’est pas définie. Si stream est un pointeur null, ou si origin n’est pas une des valeurs autorisées décrite ci-dessous, fseek et _fseeki64 appellent le Gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions définissent errno avec la valeur EINVAL et retournent -1.

Le fseek et _fseeki64 fonctions déplace le pointeur de fichier (le cas échéant) associé stream vers un nouvel emplacement est offset octets à partir de origin . L’opération suivante dans le flux de données a lieu dans le nouvel emplacement. Sur un flux ouvert pour la mise à jour, l’opération suivante peut être une lecture ou une écriture. L’origine de l’argument doit être une des constantes suivantes, définies dans STDIO. H :

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. fseeket _fseeki64efface l’indicateur de fin de fichier et annule l’effet du tout avant ungetc les appels de fonction stream.

Lorsqu’un fichier est ouvert pour l’ajout de données, la position actuelle du fichier est déterminée par la dernière opération d’e/s, pas par où l’écriture suivante peut se produire. Si aucune opération d’e/s s’est produite sur un fichier ouvert pour l’ajout, la position de fichier est le début du fichier.

Pour les flux ouverts en mode texte, fseek et _fseeki64utilisation, avoir limitée, car les traductions de saut de ligne-retour chariot peuvent provoquer fseek et _fseeki64pour produire des résultats inattendus. La seule fseek et _fseeki64sont des opérations fonctionnent sur le flux ouvert en mode texte :

  • Recherche avec un décalage de 0 par rapport à toutes les valeurs d’origine.

  • Recherche à partir du début du fichier avec une valeur de décalage retourné par un appel à ftell lors de l’utilisation fseekou _ftelli64lors 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 CTRL + Z à la fin du fichier et le supprimer si possible. Cela est fait à l’aide de la combinaison de fseek et ftellou_fseeki64 et _ftelli64, pour se déplacer dans un fichier qui se termine par CTRL + Z peut provoquer fseek ou _fseeki64 pour fonctionner correctement à la fin du fichier.

Lorsque la bibliothèque CRT ouvre un fichier qui commence avec une marque d’ordre d’octet (BOM), le pointeur de fichier est positionné après la marque BOM (autrement dit, au début du contenu réel du fichier). Si vous devez fseek au début du fichier, utilisez ftell pour obtenir la position initiale et fseek lui plutôt qu’à la position 0.

Cette fonction verrouille les autres threads pendant l’exécution et n’est par conséquent thread-safe. Pour une version sans verrouillage, voir _fseek_nolock, _fseeki64_nolock.

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

Pour plus d'informations sur la compatibilité, voir Compatibilité dans l'introduction.

// 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'.  

Flux d’e/s
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rembobinage

Afficher: