FatFs文件系统:f_readdir
读取目录项。
FRESULT f_readdir ( DIR* DirObject, /* 指向打开的目录对象结构的指针 */ FILINFO* FileInfo /* 指向文件信息结构的指针 */ );
参数:
DirObject 打开的目录对象的指针。
FileInfo 存储已读取项的文件信息结构指针。
返回值:
FR_OK (0)函数成功。
FR_DISK_ERR 由于底层磁盘 I/O 函数中的错误,而导致该函数失败。
FR_INT_ERR 由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。
FR_NOT_READY 由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT 文件对象无效。
描述:
f_readdir 函数当_FS_MINIMIZE <= 1 时可用。
f_readdir 函数顺序读取目录项。目录中的所有项可以通过重复调用 f_readdir 函数被读取。当所有目录项已被读取并且没有项要读取时,该函数没有任何错误地返回一个空字符串到 f_name[]成员中。当 FileInfo给定一个空指针时,目录对象的读索引将被回绕。当 LFN 功能被使能时,在使用 f_readdir 函数之前,文件信息结构中的 lfname 和 lfsize 必须被初始化为有效数值。lfname 是一个返回长文件名的字符串缓冲区指针。lfsize 是以字符为单位的字符串缓冲区的大小。如果读缓冲区或 LFN 工作缓冲区的大小(对于 LFN)不足,或者对象没有 LFN,则一个空字符串将被返回到LFN 读缓冲区。如果 LFN 包含任何不能被转换为 OEM 代码的字符,则一个空字符串将被返回,但是这不是 Unicode API 配置的情况。当 lfname 是一个空字符串时,没有 LFN 的任何数据被返回。当对象没有 LFN时,任何小型大写字母可以被包含在 SFN 中。
当相对路径功能被使能(_FS_RPATH == 1)时,"."和".."目录项不会被过滤掉,并且它将出现在读目录项中。
示例:
FRESULT scan_files ( char* path /* Start node to be scanned (also used as work area) */ ) { FRESULT res; FILINFO fno; DIR dir; int i; char *fn; /* This function is assuming non-Unicode cfg. */ #if _USE_LFN static char lfn[_MAX_LFN + 1]; fno.lfname = lfn; fno.lfsize = sizeof lfn; #endif res = f_opendir(&dir, path); /* Open the directory */ if (res == FR_OK) { i = strlen(path); for (;;) { res = f_readdir(&dir, &fno); /* Read a directory item */ if (res != FR_OK || fno.fname[0] == 0) break; /* Break on error or end of dir */ if (fno.fname[0] == '.') continue; /* Ignore dot entry */ #if _USE_LFN fn = *fno.lfname ? fno.lfname : fno.fname; #else fn = fno.fname; #endif if (fno.fattrib & AM_DIR) { /* It is a directory */ sprintf(&path[i], "/%s", fn); res = scan_files(path); if (res != FR_OK) break; path[i] = 0; } else { /* It is a file. */ printf("%s/%s\n", path, fn); } } } return res; }