分享方式:


_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,而不是如 Visual Studio 2013 和更早版本中的 FindFirstFile。 這表示,如果路徑會參考目錄,以斜線結尾路徑上的 _stat 會成功,與之前在函式發生錯誤時將 errno 設定為 ENOENT 的情況相反。

這個函式會驗證它的參數。 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