_stat函数的使用
Posted wasbry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_stat函数的使用相关的知识,希望对你有一定的参考价值。
c++获取文件信息——_stat函数的使用
_stat函数的功能
_stat函数用来获取指定路径的文件或者文件夹的信息。
函数声明
- int _stat(
- const char *path,
- struct _stat *buffer
- );
参数:
path——文件或者文件夹的路径
buffer——获取的信息保存在内存中
返回值:
正确——返回0
错误——返回-1,具体错误码保存在errno中
struct _stat结构体
_stat结构体是文件(夹)信息的结构体,定义如下:
- struct stat {
- _dev_t st_dev; //文件所在磁盘驱动器号
- _ino_t st_ino; //inode,FAT、NTFS文件系统无意义
- unsigned short st_mode; //文件、文件夹的标志
- short st_nlink; //非NTFS系统上通常为1
- short st_uid; //UNIX系统上为userid,windows上为0
- short st_gid; //UNIX系统上为groupid,windows上为0
- _dev_t st_rdev; //驱动器号,与st_dev相同
- _off_t st_size; //文件字节数
- time_t st_atime; //上次访问时间
- time_t st_mtime; //上次修改时间
- time_t st_ctime; //创建时间
- };
以上信息就是可以通过_stat函数获取的所有相关信息,一般情况下,我们关心文件大小和创建时间、访问时间、修改时间。
例子
注:该例子来自MSDN,http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx
- // 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. ", filename);
- break;
- case EINVAL:
- printf("Invalid parameter to _stat. ");
- break;
- default:
- /* Should never be reached. */
- printf("Unexpected error in _stat. ");
- }
- }
- else
- {
- // Output some of the statistics:
- printf( "File size : %ld ", buf.st_size );
- printf( "Drive : %c: ", 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
支持不同时间长度和文件长度
_stat函数中时间定义为64位,文件长度也定义为32位,同时使用char*表示文件名称。我们知道可以时间可以定义为64位和32位:__time64和__time32,文件名也可以用宽字符来表示,文件长度也可以定义为64位。因此该函数有很多变体,这些函数用法都是一样的,我们根据具体情况选择使用哪个函数。
- 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
- );
以上是关于_stat函数的使用的主要内容,如果未能解决你的问题,请参考以下文章