_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 和 _sys_nerr 有关这方面的更多信息以及其他,返回代码。
在文件的日期标记可在 23:59 之前表示,如果它比午夜, 1970 年一月 1 日之后,和: 59,十二月 31 日, 3000, UTC,,除非使用 _stat32 或 _wstat32,或者定义 _USE_32BIT_TIME_T,,该日期只能表示直到 03:14 情况下: 一月 07 日 19 日 2038 中, UTC。
备注
_stat 功能在结构获取有关 path 或目录的信息指定的文件并将其存储指向由 buffer。 自动_stat 处理多字节字符串参数根据需要,识别多字节字符顺序基于当前正在使用多字节代码的页。
_wstat 是 _stat的宽字符版本;为 _wstat 的 path 参数是宽字符字符串。 _wstat 和 _stat 具有相同的行为,但 _wstat 不处理多字节字符字符串。
这些功能的变体支持 32 位或 64 位时间类型以及 32 位或 64 位文件长度。 第一个数字后缀 (32 或 64) 指示所用的时间类型的大小;第二后缀是 i32 或 i64,指示文件大小是否表示为 32 位或 64 位整数。
_stat 与 _stat64i32是等效的,因此, struct_stat 包含一个 64 位时间。 为 true,除非 _USE_32BIT_TIME_T 定义,因此,在旧行为实际情况下为; _stat 使用 32 位时间,因此, struct_stat 包含 32 位时间。 上述情况同样适用于 _stati64。
备注
_wstat 不与 Windows Vista 符号字符串一起使用。在这些情况下, _wstat 始终报告文件大小为 0。_stat 正确使用符号字符串一起使用。
此功能验证其参数。 如果 path 或 buffer 是 NULL,无效参数调用处理程序,如 参数验证所述。
超时 _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
信息节点 ( 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 系统的零。 已重定向的文件分类为 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 后跟 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 );
}
}
.NET Framework 等效项
请参见
参考
_fstat, _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32