#ifndef INCLUDED_C_FILEITER_H #define INCLUDED_C_FILEITER_H #ifndef INCLUDED_C_TYPES_H #include #endif /*INCLUDED_C_TYPES_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ // 文件类型枚举 typedef enum { C_FILE_TYPE_REGULAR, // 普通文件 C_FILE_TYPE_DIR, // 目录 C_FILE_TYPE_UNKNOWN // 未知 } c_FileType_t; // 迭代器当前指向的文件/目录条目信息 typedef struct { char name[256]; // 文件/文件夹名称 c_FileType_t type; // 类型 unsigned long long size; // 文件大小(适配大文件) } c_FileEntry_t; // 迭代器结构体定义(隐藏平台差异) typedef struct { void* internal_ctx; // 内部上下文指针,用于隔离平台的目录句柄状态 c_FileEntry_t current; // 当前读取到的条目缓存 int has_next; // 是否还有下一个有效条目的状态标识 char base_path[256]; // 记录初始目录路径(Remove 函数需要拼接完整路径) } c_FileIter_t; /* ------------------------------------------------------------------------------------------------------------------ */ /* 目录迭代器 API */ /** * @brief 初始化目录迭代器,并预读第一个有效条目 */ c_err_t c_FileIter_Init(c_FileIter_t* iter, const char* dirpath); /** * @brief 判断是否还有下一个条目 */ c_bool_t c_FileIter_HasNext(c_FileIter_t* iter); /** * @brief 步进到下一个有效的条目,并自动过滤 "." 和 ".." */ void c_FileIter_Next(c_FileIter_t* iter); /** * @brief 获取当前条目的只读指针 */ const c_FileEntry_t* c_FileIter_Get(c_FileIter_t* iter); /** * @brief 删除当前迭代器指向的文件或空目录,并自动安全释放迭代器资源 */ c_err_t c_FileIter_Remove(c_FileIter_t* iter); #endif /*INCLUDED_C_FILEITER_H*/