这几天移植了 Azure的fileX和usbX,U盘读写,根目录搜索都可以。
但是想遍历所有子目录和文件确是不行,采样递归设置默认目录的方式搜索,
第一级目录调用fx_directory_next_full_entry_find()可以得到所有目录内容。
到第二级目录调用fx_directory_next_full_entry_find()
就返回 FX_NO_MORE_ENTRIES (0x0F) 此目录中不再有条目
实际子目录有文件和文件夹的。
有没有哪位朋友有试过的,麻烦指点一下,我那里错了。
[C] 纯文本查看 复制代码 void file_find_all(FX_MEDIA *fx_media, c8 *path) {
ULONG size;
u32 attributes, status = 0;
c8 buf[FX_MAX_LONG_NAME_LEN];
//此服务设置媒体的默认目录 如果提供了值 FX_NULL 则默认目录将设置为媒体的根目录
if (!path[0]) {
status = fx_directory_default_set(fx_media, NULL); //返回目录
} else {
status = fx_directory_default_set(fx_media, path);
}
USBH_UsrLog("path: %s ", path); //
USBH_UsrLog("directory_default_set: %#x ", status);
while (1) {
//此服务检索默认目录中的下一个条目名称, 并将其复制到指定目标
status = fx_directory_next_full_entry_find(fx_media, buf, &attributes, &size, NULL, NULL, NULL, NULL, NULL, NULL);
if (status == FX_SUCCESS) {
USBH_UsrLog("size: %ld KB", size / 1024);
if (attributes == (FX_DIRECTORY)) { // | FX_READ_ONLY
u8 i = strlen(path);
sprintf(&path[i], "\\%s", buf); //获取子目录路径
file_find_all(fx_media, path); //
path[i] = 0; //把路径截断
if (!path[0]) {
status = fx_directory_default_set(fx_media, NULL); //返回目录
} else {
status = fx_directory_default_set(fx_media, path);
}
USBH_UsrLog("end directory_default_set: %#x ", status);
} else { // if (attributes == FX_ARCHIVE)
USBH_UsrLog("path: %s ", buf);
USBH_UsrLog("size: %ld KB", size / 1024);
}
} else {
USBH_UsrLog("status: %#x ", status);
break;
}
}
}
|