Partager via


fseek, _fseeki64

Déplace le pointeur de fichier vers 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 de origin.

  • origin
    Position initiale.

Valeur de retour

En cas de succès fseek et _fseeki64 retourne 0. Sinon, il retourne une valeur différente de zéro. Sur des périphériques incapables d'effectuer des recherches, la valeur de retour n'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 appelle 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.

Notes

Les fonctionsfseek et _fseeki64 déplacent le pointeur de fichier (s'il existe) associé à stream vers un nouvel emplacement qui est décalé deoffset octets par rapport à l'origin*.* L'opération suivante dans le flux de donnée prend place dans le nouvel emplacement. Dans un flux ouvert pour la mise à jour, l'opération suivante peut être soit une lecture soit ou une écriture. L'origine de l'argument doit etre l'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 ou dans un fichier. Le pointeur peut également être placé au delà de la fin du fichier. fseek et _fseeki64nettoie l'indicateur de fin de fichier et inverse le résultat de tous les appels antérieurs ungetc sur stream.

Lorsqu'un fichier est ouvert pour ajouter des données, la position actuelle du fichier est déterminée par la dernière opération d'E/S, et non par lorsque l'écriture suivante se produirait. Si aucune opération d'E/S ne s'est produite dans un fichier ouvert pour l'ajout, la position de fichier correspond au début du fichier.

Pour les flux de données ouverts en mode texte, fseek et _fseeki64ont une utilisation limitée, car les traductions de saut de ligne-retour de chariot peuvent faire quefseek et _fseeki64produisent des résultats inattendus. Les seules opérationsfseek et _fseeki64, qui sont assurées d'utiliser des flux de données ouverts en mode texte sont :

  • Recherchant un décalage de 0 par rapport à n'importe laquelle des valeurs d'origine.

  • Recherchant du début du fichier avec une valeur de décalage retournée par un appel à ftell en utilisant fseekou _ftelli64en utilisant_fseeki64.

Dans le mode texte, CTRL+Z est interprété comme un caractère de fin de fichier en entrée. Dans les fichiers ouverts pour lecture/écriture fopenet toutes les autres routines vérifient la présence de Ctrl+Z à la fin du fichier et le supprime si possible. Cette opération est effectuée car l'utilisation de la combinaison de fseek et de ftellou_fseeki64 et _ftelli64, pour se déplacer à l'intérieur d'un fichier , qui se termine par un CTRL+Z peut agir surfseek ou_fseeki64et provoquer leur comportement de manière inappropriée près de la fin du fichier.

Lorsque le CRT ouvre un fichier qui commence par une marque d'ordre d'octet (BOM), dle pointeur du fichier est positionné après le BOM (qui est, au commencement du vrai contenu d'un fichier) Si vous devez fseek au début du fichier, utilisez ftell pour obtenir la position initiale et fseekle plutôt que pour la position 0.

Cette fonction verrouille d'autres threads pendant l'exécution et est par conséquent 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 plus d'informations sur la compatibilité, 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 );
}
  

Équivalent .NET Framework

Voir aussi

Référence

E/S de flux

fopen, _wfopen

ftell, _ftelli64

_lseek, _lseeki64

rewind