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