Compartir a través de


_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32, _wstat, _wstat32_wstat64_wstati64_wstat32i64_wstat64i32

Obtenga información de estado sobre un archivo.

Sintaxis

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
);

Parámetros

path
Puntero a una cadena que contiene la ruta de acceso del directorio o el archivo existente.

buffer
Puntero a la estructura que almacena los resultados.

Valor devuelto

Cada una de estas funciones devuelve 0 si se obtiene la información de estado de archivo. Un valor devuelto de -1 indica un error, en cuyo caso errno se establece ENOENTen , lo que indica que no se encontró el nombre de archivo o la ruta de acceso. Un valor devuelto de EINVAL indica un parámetro no válido; errno también se establece en EINVAL en este caso.

Para obtener más información sobre los códigos de retorno, vea errno, _doserrno, _sys_errlist y _sys_nerr.

La marca de fecha de un archivo se puede representar si es posterior a medianoche, 1 de enero de 1970 y antes de las 23:59:59, 31 de diciembre de 3000, UTC, a menos que use _stat32 o _wstat32, o haya definido _USE_32BIT_TIME_T, en cuyo caso la fecha solo se puede representar hasta las 23:59:59 del 18 de enero de 2038, UTC.

Comentarios

La función _stat obtiene información sobre el archivo o el directorio especificado por path y lo almacena en la estructura que señala buffer. _stat controla automáticamente argumentos de cadenas de caracteres multibyte según corresponda, reconociendo secuencias de caracteres multibyte según la página de códigos multibyte actualmente en uso.

_wstat es una versión con caracteres anchos de _stat; el argumento path para _wstat es una cadena de caracteres anchos. _wstat y _stat se comportan de manera idéntica, salvo que _wstat no controla las cadenas de caracteres multibyte.

Las variaciones de estas funciones admiten tipos de tiempo de 32 o 64 bits y longitudes de archivo de 32 o 64 bits. El primer sufijo numérico (32 o 64) indica el tamaño del tipo de tiempo usado; el segundo sufijo es i32 o i64, lo que indica si el tamaño del archivo se representa como un entero de 32 o 64 bits.

_stat es equivalente a _stat64i32y struct _stat contiene un tiempo de 64 bits, a menos _USE_32BIT_TIME_T que se defina, en cuyo caso el comportamiento anterior está en vigor; _stat usa un tiempo de 32 bits y struct _stat contiene un tiempo de 32 bits. Lo mismo ocurre para _stati64.

Nota:

_wstat no funciona con vínculos simbólicos de Windows Vista. En estos casos, _wstat siempre notificará un tamaño de archivo de 0. _stat funciona correctamente con vínculos simbólicos. La familia _stat de funciones usa CreateFile en Visual Studio 2015, en lugar de FindFirstFile como en Visual Studio 2013 y versiones anteriores. Esto significa que _stat en una ruta de acceso que termina con una barra diagonal se realiza correctamente si la ruta de acceso hace referencia a un directorio, en lugar de a antes de cuando la función produciría un error con errno establecido en ENOENT.

Esta función valida sus parámetros. Si o path buffer es NULL, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Tipo de tiempo y variaciones de tipo de longitud de archivo de _stat

Funciones _USE_32BIT_TIME_T definido Tipo de tiempo Tipo de longitud de archivo
_stat, _wstat No definida 64 bits 32 bits
_stat, _wstat Definido 32 bits 32 bits
_stat32, _wstat32 No se ve afectada por la definición de macro 32 bits 32 bits
_stat64, _wstat64 No se ve afectada por la definición de macro 64 bits 64 bits
_stati64, _wstati64 No definida 64 bits 64 bits
_stati64, _wstati64 Definido 32 bits 64 bits
_stat32i64, _wstat32i64 No se ve afectada por la definición de macro 32 bits 64 bits
_stat64i32, _wstat64i32 No se ve afectada por la definición de macro 64 bits 32 bits

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tstat _stat _stat _wstat
_tstat64 _stat64 _stat64 _wstat64
_tstati64 _stati64 _stati64 _wstati64
_tstat32i64 _stat32i64 _stat32i64 _wstat32i64
_tstat64i32 _stat64i32 _stat64i32 _wstat64i32

La estructura _stat, que se define en SYS\STAT.H, incluye los campos siguientes.

Campo Descripción
st_gid Identificador numérico del grupo que posee el archivo (específico de UNIX). Este campo siempre será cero en sistemas Windows. Un archivo redirigido se clasifica como archivo Windows.
st_atime Hora del último acceso del archivo. Válido en NTFS, pero no en unidades de disco con formato FAT.
st_ctime Hora de creación del archivo. Válido en NTFS, pero no en unidades de disco con formato FAT.
st_dev Número de unidad del disco que contiene el archivo (igual que st_rdev).
st_ino Número del nodo de información ( inode) para el archivo (específico de UNIX). En sistemas de archivos UNIX, inode describe la fecha del archivo y las marcas de tiempo, los permisos y el contenido. Cuando los archivos se vinculan físicamente entre sí, comparten el mismo inode. inodey, por tanto, st_ino, no tiene ningún significado en los sistemas de archivos FAT, HPFS o NTFS.
st_mode Máscara de bits para información de modo de archivo. El bit _S_IFDIR se establece si path especifica un directorio; el bit _S_IFREG se establece si path especifica un archivo normal o un dispositivo. Los bits de lectura y escritura de usuario se establecen según el modo de permiso del archivo; los bits de ejecución de usuario se establecen según la extensión del nombre de archivo.
st_mtime Hora de la última modificación del archivo.
st_nlink Siempre 1 en sistemas de archivos que no son NTFS.
st_rdev Número de unidad del disco que contiene el archivo (igual que st_dev).
st_size Tamaño del archivo en bytes; entero de 64 bits para variaciones con el sufijo i64.
st_uid Identificador numérico del usuario propietario del archivo (específico de UNIX). Este campo siempre será cero en los sistemas Windows. Un archivo redirigido se clasifica como archivo Windows.

Si path hace referencia a un dispositivo, st_size, varios campos de tiempo, st_devy los campos st_rdev de la estructura _stat no tienen sentido. Dado que STAT.H usa el tipo _dev_t, que se define en TYPES.H, debe incluir TYPES.H delante de STAT.H en el código.

Requisitos

Routine Encabezado necesario Encabezados opcionales
_stat, _stat32, _stat64, _stati64, , _stat32i64, _stat64i32 <sys/types.h> seguido de <sys/stat.h> <errno.h>
_wstat, _wstat32, _wstat64, _wstati64, , _wstat32i64, _wstat64i32 <sys/types.h> seguido de <sys/stat.h> o <wchar.h> <errno.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

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

Consulte también

Control de archivos
_access, _waccess
_fstat, _fstat32, _fstat64, _fstati64, , _fstat32i64, _fstat64i32
_getmbcp
_setmbcp