Partager via


_stat, , _stat32, _stati64, , _stat64i32_wstati64_wstat32i64_wstat_wstat64_wstat32_stat32i64_stat64_wstat64i32

Obtenir des informations sur l’état d’un fichier.

Syntaxe

int _stat(
   const char *path,
   struct _stat *buffer
);
int _stat32(
   const char *path,
   struct __stat32 *buffer
);
int _stat64(
   const char *path,
   struct __stat64 *buffer
);
int _stati64(
   const char *path,
   struct _stati64 *buffer
);
int _stat32i64(
   const char *path,
   struct _stat32i64 *buffer
);
int _stat64i32(
   const char *path,
   struct _stat64i32 *buffer
);
int _wstat(
   const wchar_t *path,
   struct _stat *buffer
);
int _wstat32(
   const wchar_t *path,
   struct __stat32 *buffer
);
int _wstat64(
   const wchar_t *path,
   struct __stat64 *buffer
);
int _wstati64(
   const wchar_t *path,
   struct _stati64 *buffer
);
int _wstat32i64(
   const wchar_t *path,
   struct _stat32i64 *buffer
);
int _wstat64i32(
   const wchar_t *path,
   struct _stat64i32 *buffer
);

Paramètres

path
Pointeur vers une chaîne contenant le chemin d’accès du fichier ou répertoire existant.

buffer
Pointeur vers une structure qui stocke les résultats.

Valeur retournée

Chacune de ces fonctions retourne 0 si les informations sur l’état des fichiers sont obtenues. Une valeur de retour de -1 indique une erreur, auquel cas errno est définie ENOENT, indiquant que le nom de fichier ou le chemin d’accès est introuvable. Une valeur de retour de EINVAL indique un paramètre non valide ; dans ce cas, errno prend également la valeur EINVAL .

Pour plus d’informations sur les codes de retour, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

L’horodatage d’un fichier peut être représenté s’il est antérieur à minuit, le 1er janvier 1970 et avant le 23:59:59:59, le 31 décembre 3000, UTC, sauf si vous utilisez _stat32 ou _wstat32si vous avez défini _USE_32BIT_TIME_T, auquel cas la date peut être représentée uniquement jusqu’à 23:59:59:59 janvier 2038, UTC.

Notes

La fonction _stat obtient des informations sur le fichier ou le répertoire spécifié par path et les stocke dans la structure vers laquelle bufferpointe. _stat gère automatiquement les arguments de chaîne de caractères multioctets si nécessaire, en identifiant les séquences de caractères multioctets en fonction de la page de codes multioctets en cours d’utilisation.

_wstat est une version à caractères larges de _stat; l'argument path de _wstat est une chaîne à caractères larges. _wstat et _stat se comportent de la même façon, sauf que _wstat cela ne gère pas les chaînes de caractères multioctets.

Les variantes de ces fonctions prennent en charge les types de temps 32 bits ou 64 bits et les longueurs de fichier 32 bits ou 64 bits. Le premier suffixe numérique (32 ou 64) indique la taille du type d’heure utilisé ; le deuxième suffixe est i32 ou i64, qui indique si la taille du fichier est représentée comme un entier 32 bits ou 64 bits.

_stat équivaut à _stat64i32, et struct _stat contient une heure 64 bits, sauf si _USE_32BIT_TIME_T elle est définie, auquel cas l’ancien comportement est en vigueur ; _stat utilise une heure 32 bits et struct _stat contient une heure 32 bits. La même remarque s’applique à _stati64.

Remarque

_wstat ne fonctionne pas avec les liens symboliques Windows Vista. Dans ce cas, _wstat indique toujours une taille de fichier de 0. _stat fonctionne correctement avec les liens symboliques. La famille de fonctions _stat utilise CreateFile dans Visual Studio 2015, plutôt que FindFirstFile comme dans Visual Studio 2013 et versions antérieures. Cela signifie que _stat sur un chemin se terminant par une barre oblique réussit si le chemin fait référence à un répertoire, alors qu’auparavant la fonction générait une erreur avec errno défini sur ENOENT.

Cette fonction valide ses paramètres. Si l’un path ou l’autre buffer est NULLle cas, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres.

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

Variations des types de données d’heure et de taille de fichier de _stat

Functions _USE_32BIT_TIME_T défini Type de temps Type de longueur de fichier
_stat, _wstat Non défini 64 bits 32 bits
_stat, _wstat Défini 32 bits 32 bits
_stat32, _wstat32 Non affecté par la définition de macro 32 bits 32 bits
_stat64, _wstat64 Non affecté par la définition de macro 64 bits 64 bits
_stati64, _wstati64 Non défini 64 bits 64 bits
_stati64, _wstati64 Défini 32 bits 64 bits
_stat32i64, _wstat32i64 Non affecté par la définition de macro 32 bits 64 bits
_stat64i32, _wstat64i32 Non affecté par la définition de macro 64 bits 32 bits

Mappages de routines de texte générique

Routine TCHAR.H _UNICODE et _MBCS non définis _MBCS défini _UNICODE défini
_tstat _stat _stat _wstat
_tstat64 _stat64 _stat64 _wstat64
_tstati64 _stati64 _stati64 _wstati64
_tstat32i64 _stat32i64 _stat32i64 _wstat32i64
_tstat64i32 _stat64i32 _stat64i32 _wstat64i32

La _stat structure, définie dans SYS\STAT.H, inclut les champs suivants.

Champ Description
st_gid Identificateur numérique du groupe propriétaire du fichier (propre à UNIX). Ce champ est toujours zéro sur les systèmes Windows. Un fichier de redirection est classé comme un fichier Windows.
st_atime Heure du dernier accès au fichier. Valide sur NTFS, mais pas sur les lecteurs de disque au format FAT.
st_ctime Heure de création du fichier. Valide sur NTFS, mais pas sur les lecteurs de disque au format FAT.
st_dev Numéro de lecteur du disque contenant le fichier (identique à st_rdev).
st_ino Numéro du nœud d’informations (le inode) du fichier (propre à UNIX). Sur les systèmes de fichiers UNIX, le inode décrit la date et l’heure du fichier, les horodatages, les autorisations et le contenu. Lorsque les fichiers sont liés par des liens physiques, ils partagent le même inode. Le inode, et par conséquent st_ino, n’a aucune signification dans les systèmes de fichiers FAT, HPFS et NTFS.
st_mode Masque de bits pour les informations relatives au mode de fichier. Le bit _S_IFDIR est défini si path spécifie un répertoire. Le bit _S_IFREG est défini si path spécifie un fichier ordinaire ou un périphérique. Les bits de lecture/écriture utilisateur sont définis en fonction du mode d’autorisation du fichier. Les bits d’exécution utilisateur sont définis en fonction de l’extension de nom de fichier.
st_mtime Heure de dernière modification du fichier.
st_nlink Toujours 1 sur les systèmes de fichiers autres que NTFS.
st_rdev Numéro de lecteur du disque contenant le fichier (identique à st_dev).
st_size Taille du fichier en octets ; entier 64 bits pour les variantes avec le i64 suffixe.
st_uid Identificateur numérique de l’utilisateur propriétaire du fichier (propre à UNIX). Ce champ est toujours zéro sur les systèmes Windows. Un fichier de redirection est classé comme un fichier Windows.

Si path fait référence à un périphérique, le st_size, divers champs d’heure et les champs st_devet st_rdev dans la structure _stat n’ont aucune signification. Étant donné que STAT.H vous utilisez le _dev_t type défini dans TYPES.H, vous devez inclure TYPES.H avant STAT.H dans votre code.

Spécifications

Routine En-tête requis En-têtes facultatifs
_stat, , _stat32, _stati64_stat64, , _stat32i64_stat64i32 <sys/types.h> suivi de <sys/stat.h> <errno.h>
_wstat, , _wstat32, _wstati64_wstat64, , _wstat32i64_wstat64i32 <sys/types.h>suivi ou <sys/stat.h><wchar.h> <errno.h>

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

Exemple

// crt_stat.c
// This program uses the _stat function to
// report information about the file named crt_stat.c.

#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>

int main( void )
{
   struct _stat buf;
   int result;
   char timebuf[26];
   char* filename = "crt_stat.c";
   errno_t err;

   // Get data associated with "crt_stat.c":
   result = _stat( filename, &buf );

   // Check if statistics are valid:
   if( result != 0 )
   {
      perror( "Problem getting information" );
      switch (errno)
      {
         case ENOENT:
           printf("File %s not found.\n", filename);
           break;
         case EINVAL:
           printf("Invalid parameter to _stat.\n");
           break;
         default:
           /* Should never be reached. */
           printf("Unexpected error in _stat.\n");
      }
   }
   else
   {
      // Output some of the statistics:
      printf( "File size     : %ld\n", buf.st_size );
      printf( "Drive         : %c:\n", buf.st_dev + 'A' );
      err = ctime_s(timebuf, 26, &buf.st_mtime);
      if (err)
      {
         printf("Invalid arguments to ctime_s.");
         exit(1);
      }
      printf( "Time modified : %s", timebuf );
   }
}
File size     : 732
Drive         : C:
Time modified : Thu Feb 07 14:39:36 2002

Voir aussi

Gestion des fichiers
_access, _waccess
_fstat, , _fstat32, _fstati64_fstat64, , _fstat32i64_fstat64i32
_getmbcp
_setmbcp