赞
踩
stat结构体数据如下
struct stat {
dev_t st_dev; //device 文件的设备编号
ino_t st_ino; //inode 文件的i-node
mode_t st_mode; //protection 文件的类型和存取的权限
nlink_t st_nlink; //number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1.
uid_t st_uid; //user ID of owner 文件所有者的用户识别码
gid_t st_gid; //group ID of owner 文件所有者的组识别码
dev_t st_rdev; //device type 若此文件为装置设备文件, 则为其设备编号
off_t st_size; //total size, in bytes 文件大小, 以字节计算
unsigned long st_blksize; //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.
u nsigned long st_blocks; //number of blocks allocated 占用文件区块的个数, 每一区块大小为512 个字节.
time_t st_atime; //time of lastaccess 文件最近一次被存取或被执行的时间, 一般只有在用mknod、 utime、read、write 与tructate 时改变.
time_t st_mtime; //time of last modification 文件最后一次被修改的时间, 一般只有在用mknod、 utime 和write 时才会改变
time_t st_ctime; //time of last change i-node 最近一次被更改的时间, 此参数会在文件所有者、组、 权限被更改时更新
};
通过stat函数获取dir1, dir2, dir3个目录下的所有文件信息,以下是一个示例:
- void getFileInfo() {
- vector<string> directories = { "/dir1", "/dir2", "/dir3"};
- size_t totalSize = 0;//获取3个目录下所有子文件子目录的大小
- for (const auto& dir : directories) {
- //打开目录
- DIR* dir = opendir(dir.c_str());
- if (dir != nullptr) {
- struct dirent* entry;
- //read目录
- while ((entry = readdir(dir)) != nullptr) {
- if (string(entry->d_name) != "." && string(entry->d_name) != "..") {
- string file_Path = dir + entry->d_name;
- struct stat statBuf;
- if (stat(file_Path.c_str(), &statBuf) == 0) {
- //size累加,用于获取目录下所有的文件大小
- totalSize += statBuf.st_size;
- //获取文件修改时间
- time_t filetime = statBuf.st_mtime;
- ALOGD("statBuf.st_size = %zu", totalSize);
- }
- }
- }
- closedir(dir);
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。