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

Uzyskaj informacje o stanie pliku.

Składnia

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

Parametry

path
Wskaźnik do ciągu zawierającego ścieżkę istniejącego pliku lub katalogu.

buffer
Wskaźnik do struktury, która przechowuje wyniki.

Wartość zwracana

Każda z tych funkcji zwraca wartość 0, jeśli są uzyskiwane informacje o stanie pliku. Wartość zwracana -1 wskazuje błąd, w którym przypadku errno ustawiono ENOENTwartość , wskazując, że nie można odnaleźć nazwy pliku lub ścieżki. Wartość zwracana EINVAL wskazuje nieprawidłowy parametr; errno jest również ustawiona na EINVAL wartość w tym przypadku.

Aby uzyskać więcej informacji na temat kodów zwracanych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Sygnatura daty w pliku może być reprezentowana, jeśli jest późniejsza niż północ, 1 stycznia 1970 r. i przed 23:59:59, 31 grudnia 3000 r., UTC, chyba że używasz _stat32 lub _wstat32zdefiniowano _USE_32BIT_TIME_T, w którym przypadku data może być reprezentowana tylko do 23:59:59 stycznia 18, 2038, UTC.

Uwagi

Funkcja _stat uzyskuje informacje o pliku lub katalogu określonym przez path program i przechowuje je w strukturze wskazywane przez bufferelement . _stat Automatycznie obsługuje argumenty ciągów wielobajtowych znaków zgodnie z potrzebami, rozpoznając sekwencje wielobajtowe znaków zgodnie ze stroną kodową wielobajtową, która jest obecnie używana.

_wstat jest wersją szerokoznakową ; _statargument to path_wstat ciąg o szerokim znaku. _wstat i _stat zachowują się identycznie, z tą różnicą, że _wstat nie obsługuje ciągów wielobajtowych znaków.

Odmiany tych funkcji obsługują typy czasu 32-bitowego lub 64-bitowego oraz 32-bitowe lub 64-bitowe długości plików. Pierwszy sufiks liczbowy (32 lub 64) wskazuje rozmiar używanego typu czasu; drugi sufiks to i32 lub i64, wskazując, czy rozmiar pliku jest reprezentowany jako 32-bitowa lub 64-bitowa liczba całkowita.

_stat jest odpowiednikiem _stat64i32parametru i struct _stat zawiera 64-bitowy czas, chyba że _USE_32BIT_TIME_T jest zdefiniowany, w którym przypadku stare zachowanie jest stosowane; _stat używa czasu 32-bitowego i struct _stat zawiera 32-bitowy czas. To samo dotyczy ._stati64

Uwaga

_wstat nie działa z linkami symbolicznymi systemu Windows Vista. W takich przypadkach _wstat zawsze raportuje rozmiar pliku 0. _stat działa poprawnie z linkami symbolicznymi. Rodzina _statfunkcji jest używana CreateFile w programie Visual Studio 2015 zamiast FindFirstFile w programie Visual Studio 2013 i starszych wersjach. Oznacza to, że _stat na ścieżce kończącej się ukośnikiem kończy się powodzeniem, jeśli ścieżka odwołuje się do katalogu, w przeciwieństwie do wcześniejszego wystąpienia błędu funkcji z ustawioną wartością errnoENOENT.

Ta funkcja weryfikuje jego parametry. Jeśli element path lub buffer ma NULLwartość , wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Odmiany typu czasu i typu długości pliku _stat

Funkcje _USE_32BIT_TIME_T Zdefiniowane Typ godziny Typ długości pliku
_stat, _wstat Nieokreślona 64-bitowa 32-bitowa
_stat, _wstat Zdefiniowane 32-bitowa 32-bitowa
_stat32, _wstat32 Nie ma to wpływu na definicję makra 32-bitowa 32-bitowa
_stat64, _wstat64 Nie ma to wpływu na definicję makra 64-bitowa 64-bitowa
_stati64, _wstati64 Nieokreślona 64-bitowa 64-bitowa
_stati64, _wstati64 Zdefiniowane 32-bitowa 64-bitowa
_stat32i64, _wstat32i64 Nie ma to wpływu na definicję makra 32-bitowa 64-bitowa
_stat64i32, _wstat64i32 Nie ma to wpływu na definicję makra 64-bitowa 32-bitowa

Mapowania procedur tekstu ogólnego

TCHAR.H Rutynowych _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tstat _stat _stat _wstat
_tstat64 _stat64 _stat64 _wstat64
_tstati64 _stati64 _stati64 _wstati64
_tstat32i64 _stat32i64 _stat32i64 _wstat32i64
_tstat64i32 _stat64i32 _stat64i32 _wstat64i32

Struktura zdefiniowana _stat w pliku SYS\STAT.Hzawiera następujące pola.

Pole Opis
st_gid Identyfikator liczbowy grupy, która jest właścicielem pliku (specyficznego dla system UNIX) To pole zawsze będzie zero w systemach Windows. Przekierowany plik jest klasyfikowany jako plik systemu Windows.
st_atime Czas ostatniego dostępu do pliku. Prawidłowy w systemie plików NTFS, ale nie na dyskach sformatowanych w formacie FAT.
st_ctime Czas tworzenia pliku. Prawidłowy w systemie plików NTFS, ale nie na dyskach sformatowanych w formacie FAT.
st_dev Numer dysku zawierającego plik (taki sam jak st_rdev).
st_ino Liczba węzłów informacji () inodedla pliku (system UNIX). W systemach inode plików system UNIX opisano datę i godzinę pliku, uprawnienia i zawartość. Gdy pliki są połączone ze sobą nawzajem, współużytkują te same inodepliki . System inode, i dlatego st_inonie ma znaczenia w systemach plików FAT, HPFS lub NTFS.
st_mode Maska bitowa dla informacji o trybie plików. Bit _S_IFDIR jest ustawiany, jeśli path określa katalog; _S_IFREG bit jest ustawiony, jeśli path określa zwykły plik lub urządzenie. Bity odczytu/zapisu użytkownika są ustawiane zgodnie z trybem uprawnień pliku; Bity wykonywania użytkownika są ustawiane zgodnie z rozszerzeniem nazwy pliku.
st_mtime Czas ostatniej modyfikacji pliku.
st_nlink Zawsze 1 w systemach plików innych niż NTFS.
st_rdev Numer dysku zawierającego plik (taki sam jak st_dev).
st_size Rozmiar pliku w bajtach; 64-bitowa liczba całkowita dla odmian z sufiksem i64 .
st_uid Identyfikator liczbowy użytkownika, który jest właścicielem pliku (specyficzne dla system UNIX). To pole zawsze będzie zero w systemach Windows. Przekierowany plik jest klasyfikowany jako plik systemu Windows.

Jeśli path odwołuje się do urządzenia, st_sizepola , różne pola czasu, st_devi st_rdev w _stat strukturze są bez znaczenia. Ponieważ STAT.H używa typu zdefiniowanego _dev_t w TYPES.Hpliku , należy uwzględnić TYPES.H go wcześniej STAT.H w kodzie.

Wymagania

Procedura Wymagany nagłówek Opcjonalne nagłówki
_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32 <sys/types.h>, a następnie <sys/stat.h> <errno.h>
_wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32 <sys/types.h><sys/stat.h> a następnie lub<wchar.h> <errno.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Zobacz też

Obsługa plików
_access, _waccess
_fstat, _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32
_getmbcp
_setmbcp