FATFS f_readdir函数详细解析
f_readdir
是 FatFs 文件系统库中用于读取目录条目的函数,它的作用是从一个打开的目录中逐个读取文件或子目录的条目信息。通过这个函数,可以遍历目录中的所有文件和子目录,通常用于列出目录内容。
FRESULT f_readdir (
DIR* dp, /* 指向打开的目录对象的指针 */
FILINFO* fno /* 指向返回文件信息的指针 */
)
{
FRESULT res; // 存储操作结果的变量
FATFS *fs; // 指向文件系统对象的指针
DEF_NAMBUF // 定义用于名称处理的缓冲区(宏)
res = validate(&dp->obj, &fs); // 验证目录对象的有效性,并获取文件系统指针
if (res == FR_OK) { // 如果验证成功
if (!fno) { // 如果没有提供 FILINFO 结构(fno 为 NULL)
res = dir_sdi(dp, 0); // 重置目录索引(从头开始读取)
} else { // 如果提供了 fno
INIT_NAMBUF(fs); // 初始化名称缓冲区(用于文件名处理)
res = DIR_READ_FILE(dp); // 尝试读取文件或目录项
if (res == FR_NO_FILE) // 如果到达目录末尾(没有更多文件)
res = FR_OK; // 视为有效操作(不是错误)
if (res == FR_OK) { // 如果找到有效条目
get_fileinfo(dp, fno); // 获取当前目录项的详细信息并存储在 fno 中
res = dir_next(dp, 0); // 移动到下一个目录条目
if (res == FR_NO_FILE) // 如果到达目录末尾
res = FR_OK; // 视为有效操作(不是错误)
}
FREE_NAMBUF(); // 释放名称缓冲区(清理资源)
}
}
LEAVE_FF(fs, res); // 宏,解锁并以操作结果离开文件系统
}