void GetFiles(const std::string& img_dir_path,std::vector<std::string> &img_file_paths)
{
DIR* dir;
if ((dir = opendir(img_dir_path.c_str())) == nullptr) {
throw std::runtime_error("directory " + img_dir_path + " does not exist");
}
dirent* dp;
for (dp = readdir(dir); dp != nullptr; dp = readdir(dir)) {
const std::string img_file_name = dp->d_name;
// 使用readdir读取目录中的所有文件
// 默认情况下,包括了‘.‘和‘..‘目录文件
if (img_file_name == "." || img_file_name == "..") { continue; } img_file_paths.push_back(img_dir_path + "/" + img_file_name); } closedir(dir); std::sort(img_file_paths.begin(), img_file_paths.end()); }
- 在上述代码中,通过使用 DIR、dirent 数据结构和 opendir、readdir 函数,实现了对目录及目录中的文件进行操作的目的;
- 结构体 dirent 中的成员 d_type 表示读取的目录中的文件的类型,d_name 表示读取的目录中的文件的名字。
struct __dirstream { void *__fd; char *__data; int __entry_data; char *__ptr; int __entry_ptr; size_t __allocation; size_t __size; __libc_lock_define (, __lock) }; typedef struct __dirstream DIR;
函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用:
struct dirent *readdir(DIR *dp);//读取到的文件名存储在结构体dirent的d_name成员中void rewinddir(DIR *dp);
int closedir(DIR *dp);
long telldir(DIR *dp);
void seekdir(DIR *dp,long loc);
#include <dirent.h> struct dirent { long d_ino; /* inode number 索引节点号 */ off_t d_off; /* offset to this dirent 在目录文件中的偏移 */ unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of d_name 文件类型 */ char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长256字符 *