struct stat结构体的详解和用法

struct stat结构体的详解和用法

_stat函数用来获取指定路径的文件或者文件夹的信息。//! 需要包含de头文件

#include

#include

int stat( const char *filename //文件或者文件夹的路径 , struct stat *buf //获取的信息保存在内存中); //! prototype,原型

正确——返回0

错误——返回-1,具体错误码保存在errno中

struct stat

{

dev_t st_dev; /* ID of device containing file -文件所在设备的ID*/

ino_t st_ino; /* inode number -inode节点号*/

mode_t st_mode; /* protection -保护模式?*/

nlink_t st_nlink; /* number of hard links -链向此文件的连接数(硬连接)*/

uid_t st_uid; /* user ID of owner -user id*/

gid_t st_gid; /* group ID of owner - group id*/

dev_t st_rdev; /* device ID (if special file) -设备号,针对设备文件*/

off_t st_size; /* total size, in bytes -文件大小,字节为单位*/

blksize_t st_blksize; /* blocksize for filesystem I/O -系统块的大小*/

blkcnt_t st_blocks; /* number of blocks allocated -文件所占块数*/

time_t st_atime; /* time of last access -最近存取时间*/

time_t st_mtime; /* time of last modification -最近修改时间*/

time_t st_ctime; /* time of last status change - */

}; _stat结构体是文件(夹)信息的结构体,定义如下:以上信息就是可以通过_stat函数获取的所有相关信息,一般情况下,我们关心文件大小和创建时间、访问时间、修改时间。

#include

#include

#include

#include

using namespace std;

int main ()

{

struct stat buf;

int result;

result = stat ("./Makefile", &buf);

if (result != 0)

{

perror ("Failed ^_^");

}

else

{

//! 文件的大小,字节为单位

cout << "size of the file in bytes: " << buf.st_size << endl;

//! 文件创建的时间

cout << "time of creation of the file: " << ctime (&buf.st_ctime) << endl;

//! 最近一次修改的时间

cout << "time of last modification of the file: " << ctime (&buf.st_mtime) << endl;

//! 最近一次访问的时间

cout << "time of last access of the file: " << ctime (&buf.st_atime)<< endl;

}

return 0;

}

$ ./test

size of the file in bytes: 36

time of creation of the file: Sun May 24 18:38:10 2009

time of last modification of the file: Sun May 24 18:38:10 2009

time of last access of the file: Sun May 24 18:38:13 2009

c++获取文件信息——_stat函数的使用

_stat函数的功能

_stat函数用来获取指定路径的文件或者文件夹的信息。

函数声明

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

int _stat(

const char *path,

struct _stat *buffer

);

参数:

path——文件或者文件夹的路径

buffer——获取的信息保存在内存中

返回值:

正确——返回0

错误——返回-1,具体错误码保存在errno中

struct _stat结构体

_stat结构体是文件(夹)信息的结构体,定义如下:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

// crt_stat.c

// This program uses the _stat function to

// report information about the file named crt_stat.c.

#include

#include

#include

#include

#include

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

支持不同时间长度和文件长度

_stat函数中时间定义为64位,文件长度也定义为32位,同时使用char*表示文件名称。我们知道可以时间可以定义为64位和32位:__time64和__time32,文件名也可以用宽字符来表示,文件长度也可以定义为64位。因此该函数有很多变体,这些函数用法都是一样的,我们根据具体情况选择使用哪个函数。

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

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

);

相关资讯

公司概要
www365betcom手机版

公司概要

⌚ 07-01 👁️ 7074
君临天下所有版本合集:君临天下全版本大全
体育365网投

君临天下所有版本合集:君临天下全版本大全

⌚ 07-01 👁️ 238
血肉的解释及意思
www365betcom手机版

血肉的解释及意思

⌚ 07-12 👁️ 687