64 lines
1.9 KiB
C
64 lines
1.9 KiB
C
#ifndef INCLUDED_C_FILEITER_H
|
|||
|
|
#define INCLUDED_C_FILEITER_H
|
||
|
|
|
||
|
|
#ifndef INCLUDED_C_TYPES_H
|
||
|
|
#include <c_Types.h>
|
||
|
|
#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*/
|