_stat、_wstat 函数

获取有关描述符的文件状态信息

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(str
   const char *path,
   struct _stat32i64 *buffer 
);
int _stat64i32(str
   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。

备注

如果 path 包含目录的位置,则它不能包含具有尾部的反斜杠。如果是的,将返回-1,而 errno 将设置为 ENOENT。

有关这个,其他和返回代码的更多信息,请参见 _doserrno, errno, _sys_errlist, and _sys_nerr

文件上的日期戳可在 23:59。表示,如果它比午夜,1970 年 1 月 1 日之后,即和:59,年 12 月 31 日,3000,UTC,除非使用 _stat32 或 _wstat32,或者为 _USE_32BIT_TIME_T定义,在这种情况下,可能只表示日期。03:14 情况下:07 年 1 月 19 日 2038 年,UTC。

备注

path 或 _stat 函数获取有关目录的信息指定的文件并将其存储结构中指向的 buffer。 _stat它们自动处理合适的多字节字符串参数,根据当前使用的多字节代码页识别多字节字符序列.

_wstat 是 _stat 的宽字符版本;_wstat 的 path 参数是宽字符字符串。 _wstat 和 _stat 具有相同的行为,但 _wstat 不处理多字节字符字符串。

这些函数的变体支持的 32 位或 64 位时类型和 32 位或 64 位文件长度。 第一个数字后缀 (32 或 64) 指示使用的时间类型的大小;第二个后缀要么是 i32 要么是 i64,指示文件大小是否表示为 32 位或 64 位整数。

_stat 与 _stat64i32 等效,struct _stat 包含 64 位时。 这符合,除非__USE_32BIT_TIME_T 定义旧行为,在实际情况下为;__stat 使用 32 位时,struct _stat 包含 32 位时。 这一点也适用于 _stati64。

备注

_wstat 不使用 Windows Vista 链接符号一起使用。在这些情况下,_wstat 总是将报告文件大小为 0。_stat 正确使用符号链接一起使用。

此函数验证其参数。 如果path 或 buffer 是 NULL,将调用无效参数处理程序(如参数验证所述)。

_findnext 的时间类型和文件长度键入变量

函数

已定义 _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 系统。 窗口,为文件,重定目标的类文件。

  • st_atime
    时间文件访问权限之前。 有效上的 NTFS,而在磁盘驱动器 FAT 格式。

  • st_ctime
    文件的创建时间。 有效上的 NTFS,而在磁盘驱动器 FAT 格式。

  • st_dev
    包含文件 (磁盘的进一步数字与 st_rdev相同)。

  • st_ino
    信息节点 ( inode) 数字的文件 (UNIX 特定)。 在 UNIX 文件系统上,inode 描述文件日期和时间戳、权限和内容。 当难以相互链接文件时,它们共享相同的 inode。 inode和 st_ino没有意义,在 FAT、HPFS 或 NTFS 文件系统。

  • st_mode
    文件模式信息的位掩码。 如果指定了 path 目录,_S_IFDIR 位设置;,如果 path 指定一个公共文件或与设备,_S_IFREG 已设置位。 读/写位用户根据文件的权限设置;模式用户执行位根据文件扩展名设置。

  • st_mtime
    时文件的最后修改。

  • st_nlink
    总是 1 对非 NTFS 文件系统。

  • st_rdev
    包含文件 (磁盘的进一步数字与 st_dev相同)。

  • st_size
    文件的大小 (以字节为;变体的 64 位整数。i64 后缀 ..

  • st_uid
    拥有文件用户的数字标识符 (UNIX 特定)。 此字段将始终为零。Windows 系统。 窗口,为文件,重定目标的类文件。

如果 path 引用设备,st_size,各个时间字段,st_dev,这样,_stat 结构的 st_rdev 字段是无意义的。 由于 STAT.H 使用在 TYPES.H 定义的 _dev_t 类型,则在代码中 STAT.H 之前必须包含 TYPES.H。

要求

例程

必需的标头

可选标头

_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32

<sys/types.h> followed by <sys/stat.h>

<errno.h>

_wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32

<sys/types.h> followed by <sys/stat.h> or <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 );
   }
}
  

.NET Framework 等效项

请参见

参考

文件处理

_access、_waccess

_fstat、_fstat32、_fstat64、_fstati64、_fstat32i64、_fstat64i32

_getmbcp

_setmbcp