Foundations
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
#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*/
|
||||
Reference in New Issue
Block a user