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

取得檔案的狀態資訊。

語法

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

參數

path
包含現有檔案或目錄路徑的字串指標。

buffer
儲存結果的結構指標。

傳回值

上述每個函式會在取得檔案狀態資訊時傳回 0。 -1 的傳回值表示錯誤,在此情況下 errno 會設定為 ENOENT ,表示找不到檔案名或路徑。 傳回值 EINVAL 表示參數無效,在此情況下也會將 errno 設定為 EINVAL

如需傳回碼的詳細資訊,請參閱 errno_doserrno_sys_errlist_sys_nerr

如果檔案的日期戳記晚于 1970 年 1 月 1 日午夜、1970 年 1 月 1 日及 23:59:59、3000 年 12 月 31 日、UTC 之前,除非您使用 _stat32_wstat32 ,或 已定義 _USE_32BIT_TIME_T ,在此情況下,日期只能表示到 2038 年 1 月 18 日 23:59:59,UTC。

備註

_stat 函式會取得 path 所指定之檔案或目錄的相關資訊,並將其儲存在 buffer所指向的結構中。 _stat 會根據目前使用中的多位元組字碼頁,自動將多位元組字元字串引數處理為適當且可辨識的多位元組字元序列。

_wstat 是寬字元版本的 _statpath_wstat 引數是寬字元字串。 _wstat_stat 的行為相同,不同之處在于 _wstat 不會處理多位元組字元字串。

這些函式的變化支援 32 位或 64 位時間類型,以及 32 位或 64 位檔案長度。 第一個數值後置字元 (3264) 表示所使用的時間類型大小,第二個後置字元為 i32i64,表示檔案大小是以 32 位元或 64 位元整數來表示。

_stat_stat64i32等於 ,且 struct _stat 包含 64 位時間,除非 _USE_32BIT_TIME_T 已定義,否則舊行為有效 _stat ;使用 32 位時間,且 struct _stat 包含 32 位時間。 對於 _stati64也是如此。

注意

_wstat 不適用於 Windows Vista 符號連結。 在這些情況下, _wstat 一律會回報檔案大小為 0。 _stat 則適用於符號連結。 在 _stat Visual Studio 2015 中使用函 CreateFile 式系列,而不是 FindFirstFile Visual Studio 2013 和更早版本中的 。 這表示, _stat 如果路徑參考目錄,在以斜線結尾的路徑上會成功,而不是當函式設定為 時發生錯誤 errnoENOENT 之前。

這個函式會驗證它的參數。 path如果 或 bufferNULL ,則會叫用不正確參數處理常式,如參數驗證 中所述

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

的時間類型和檔案長度類型變化 _stat

函式 _USE_32BIT_TIME_T 定義 時間類型 檔案長度類型
_stat, _wstat 未定義 64 位元 32 位元
_stat, _wstat 已定義 32 位元 32 位元
_stat32, _wstat32 不會受到巨集定義的影響 32 位元 32 位元
_stat64, _wstat64 不會受到巨集定義的影響 64 位元 64 位元
_stati64, _wstati64 未定義 64 位元 64 位元
_stati64, _wstati64 已定義 32 位元 64 位元
_stat32i64, _wstat32i64 不會受到巨集定義的影響 32 位元 64 位元
_stat64i32, _wstat64i32 不會受到巨集定義的影響 64 位元 32 位元

泛型文字常式對應

TCHAR.H 常規 _UNICODE_MBCS 未定義 _MBCS 定義 _UNICODE 定義
_tstat _stat _stat _wstat
_tstat64 _stat64 _stat64 _wstat64
_tstati64 _stati64 _stati64 _wstati64
_tstat32i64 _stat32i64 _stat32i64 _wstat32i64
_tstat64i32 _stat64i32 _stat64i32 _wstat64i32

_stat在 中 SYS\STAT.H 定義的 結構包含下欄欄位。

欄位 描述
st_gid 擁有檔案 (UNIX 特定) 之群組的數值識別碼。這個欄位在 Windows 系統上一律為零。 重新導向的檔案會歸類為 Windows 檔案。
st_atime 檔案的上次存取時間。 適用於 NTFS,但不適用 FAT 格式的磁碟機。
st_ctime 檔案的建立時間。 適用於 NTFS,但不適用 FAT 格式的磁碟機。
st_dev 內含檔案之磁碟的磁碟機數目 (與 st_rdev相同)。
st_ino 檔案 (UNIX 特定) 的資訊節點數目 ( inode)。 在 UNIX 檔案系統上, inode 會描述檔案日期和時間戳記、權限,以及內容。 當檔案彼此永久連結時,這些檔案會共用相同的 inodeinode及之後的 st_ino對 FAT、HPFS 或 NTFS 檔案系統沒有意義。
st_mode 檔案模式資訊的位元遮罩。 如果 _S_IFDIR 指定目錄,會設定 path 位元;如果 _S_IFREG 指定一般檔案或裝置,會設定 path 位元。 使用者讀取/寫入位元會根據檔案的權限模式進行設定;使用者執行位元會根據副檔名進行設定。
st_mtime 檔案的上次修改時間。
st_nlink 在非 NTFS 檔案系統上一律為 1。
st_rdev 內含檔案之磁碟的磁碟機數目 (與 st_dev相同)。
st_size 以位元組為單位的檔案大小;64 位整數,用於具有 i64 尾碼的變化。
st_uid 擁有檔案 (UNIX 特定) 之使用者的數值識別碼。 這個欄位在 Windows 系統上一律為零。 重新導向的檔案會歸類為 Windows 檔案。

如果 path 參考裝置, st_size結構中的 st_dev、各種時間欄位、 st_rdev_stat 都沒有意義。 因為 STAT.H 使用 _dev_t 中定義的型別,因此您必須在程式碼中 TYPES.H 之前 STAT.H 包含 TYPES.H

需求

常式 必要的標頭 選擇性標頭
_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32 <sys/types.h>,接著執行 <sys/stat.h> <errno.h>
_wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32 <sys/types.h><sys/stat.h>後面接著 或<wchar.h> <errno.h>

如需相容性詳細資訊,請參閱相容性

範例

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

另請參閱

檔案處理
_access, _waccess
_fstat, _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32
_getmbcp
_setmbcp