c++ 11 目录流DIR,dirent使用
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字符 *
分类:
c++11
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律