_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32, _wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32

Ottenere informazioni sullo stato di un file.

Sintassi

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

Parametri

path
Puntatore a una stringa contenente il percorso del file o directory esistente.

buffer
Puntatore alla struttura che archivia i risultati.

Valore restituito

Ognuna di queste funzioni restituisce 0 se si ottengono le informazioni sullo stato dei file. Il valore restituito -1 indica un errore, nel qual caso errno è impostato su ENOENT, a indicare che non è stato possibile trovare il nome file o il percorso. Un valore restituito pari a EINVAL indica un parametro non valido; anche errno è impostato su EINVAL in questo caso.

Per altre informazioni sui codici restituiti, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Il timbro di data in un file può essere rappresentato se è successivo a mezzanotte, 1 gennaio 1970 e prima delle 23:59:59, 31 dicembre 3000, UTC, a meno che non si usi _stat32 o _wstat32, o che sia definita _USE_32BIT_TIME_T, nel qual caso la data può essere rappresentata solo fino alle 23.59.59.59 del 18 gennaio 2038, UTC.

Osservazioni:

La funzione _stat ottiene informazioni sul file o sulla directory specificati da path e le archivia nella struttura a cui punta buffer. _stat gestisce automaticamente gli argomenti stringa di caratteri multibyte in base alle esigenze, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici multibyte attualmente in uso.

_wstat è una versione a caratteri wide di _stat; l'argomento path in _wstat è una stringa di caratteri wide. _wstat e _stat si comportano in modo identico, ad eccezione del fatto che _wstat non gestisce stringhe di caratteri multibyte.

Le varianti di queste funzioni supportano tipi di tempo a 32 bit o a 64 bit e lunghezze di file a 32 bit o a 64 bit. Il primo suffisso numerico (32 o 64) indica le dimensioni del tipo time usato; il secondo suffisso è i32 o i64, che indica se le dimensioni del file sono rappresentate come intero a 32 bit o 64 bit.

_statequivale a e struct _stat contiene un tempo a _stat64i3264 bit, a meno che non _USE_32BIT_TIME_T sia definito, nel qual caso il comportamento precedente è attivo; _stat usa un'ora a 32 bit e struct _stat contiene un tempo a 32 bit. Lo stesso vale per _stati64.

Nota

_wstat non funziona con i collegamenti simbolici di Windows Vista. In questi casi, _wstat visualizzerà sempre un file di dimensioni pari a 0. _stat funziona correttamente con i collegamenti simbolici. La _statfamiglia di funzioni usata CreateFile in Visual Studio 2015, anziché FindFirstFile in Visual Studio 2013 e versioni precedenti. Ciò significa che in un percorso che _stat termina con una barra ha esito positivo se il percorso fa riferimento a una directory, anziché prima quando la funzione restituisce un errore con errno impostato su ENOENT.

Questa funzione convalida i relativi parametri. path Se o buffer è NULL, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Variazioni del tipo di tempo e del tipo di lunghezza del file _stat

Funzioni _USE_32BIT_TIME_T Definito Tipo Time Tipo lunghezza file
_stat, _wstat Non definito 64 bit 32 bit
_stat, _wstat Definito 32 bit 32 bit
_stat32, _wstat32 Non interessato dalla definizione macro 32 bit 32 bit
_stat64, _wstat64 Non interessato dalla definizione macro 64 bit 64 bit
_stati64, _wstati64 Non definito 64 bit 64 bit
_stati64, _wstati64 Definito 32 bit 64 bit
_stat32i64, _wstat32i64 Non interessato dalla definizione macro 32 bit 64 bit
_stat64i32, _wstat64i32 Non interessato dalla definizione macro 64 bit 32 bit

Mapping di routine di testo generico

TCHAR.H Routine _UNICODE e _MBCS non definito _MBCS Definito _UNICODE Definito
_tstat _stat _stat _wstat
_tstat64 _stat64 _stat64 _wstat64
_tstati64 _stati64 _stati64 _wstati64
_tstat32i64 _stat32i64 _stat32i64 _wstat32i64
_tstat64i32 _stat64i32 _stat64i32 _wstat64i32

La _stat struttura, definita in SYS\STAT.H, include i campi seguenti.

Campo Descrizione
st_gid Identificatore numerico del gruppo cui appartiene il file (specifico di UNIX). Questo campo sarà sempre zero nei sistemi Windows. Un file reindirizzato viene classificato come file di Windows.
st_atime Ora dell'ultimo accesso del file. Valido su NTFS, ma non nelle unità disco formattate come FAT.
st_ctime Ora di creazione del file. Valido su NTFS, ma non nelle unità disco formattate come FAT.
st_dev Numero unità del disco contenente il file (uguale a st_rdev).
st_ino Numero del nodo informazioni (il inode) per il file (specifico di UNIX). Nei file system UNIX, il inode descrive la data del file e i timbri data, le autorizzazioni e il contenuto. Quando il collegamento tra i file è reale, essi condividono lo stesso inode. Il inode, e quindi st_ino, non ha alcun significato nei file system FAT, HPFS o NTFS.
st_mode Maschera di bit per informazioni sulla modalità di file. Viene impostato il bit _S_IFDIR se path specifica una directory; viene impostato il bit _S_IFREG se path specifica un file o un dispositivo normale. I bit di lettura/scrittura dell'utente sono impostati in base alla modalità di autorizzazione del file; i bit di esecuzione utente sono impostati secondo l'estensione.
st_mtime Ora dell'ultima modifica del file.
st_nlink Sempre 1 nel file system non NTFS.
st_rdev Numero unità del disco contenente il file (uguale a st_dev).
st_size Dimensioni del file in byte; intero a 64 bit per le varianti con il i64 suffisso .
st_uid Identificatore numerico dell'utente proprietario del file (specifico di UNIX). Questo campo sarà sempre zero nei sistemi Windows. Un file reindirizzato viene classificato come file di Windows.

Se path fa riferimento a un dispositivo, i campi st_size, i vari campi ora, st_deve st_rdev nella struttura _stat non hanno alcun significato. Poiché STAT.H usa il _dev_t tipo definito in TYPES.H, è necessario includere TYPES.H prima STAT.H nel codice.

Requisiti

Ciclo Intestazione obbligatoria Intestazioni facoltative
_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32 <sys/types.h> seguito da <sys/stat.h> <errno.h>
_wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32 <sys/types.h> seguito da <sys/stat.h> o <wchar.h> <errno.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

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

Vedi anche

Gestione dei file
_access, _waccess
_fstat, _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32
_getmbcp
_setmbcp