`dc2018 发表于 2022-9-22 10:29:34

关于 filex 遍历文件问题

这几天移植了 Azure的fileX和usbX,U盘读写,根目录搜索都可以。
但是想遍历所有子目录和文件确是不行,采样递归设置默认目录的方式搜索,
第一级目录调用fx_directory_next_full_entry_find()可以得到所有目录内容。
到第二级目录调用fx_directory_next_full_entry_find()
就返回 FX_NO_MORE_ENTRIES (0x0F) 此目录中不再有条目
实际子目录有文件和文件夹的。
有没有哪位朋友有试过的,麻烦指点一下,我那里错了。
void file_find_all(FX_MEDIA *fx_media, c8 *path) {
    ULONG size;
    u32 attributes, status = 0;
    c8 buf;

    //此服务设置媒体的默认目录 如果提供了值 FX_NULL 则默认目录将设置为媒体的根目录
    if (!path) {
      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, "\\%s", buf); //获取子目录路径
                file_find_all(fx_media, path);//
                path = 0;                  //把路径截断
                if (!path) {
                  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;
      }
    }
}

eric2013 发表于 2022-9-22 11:11:52

遍历子目录,要用这个函数设置下


https://img.anfulai.cn/dz/attachment/forum/202208/30/163401a8xibyzfllislily.png

`dc2018 发表于 2022-9-26 09:31:02

谢谢回复!这个函数我已经有调用了,就是不起作用。已经用回fat,无论是速度,易用性 fat都更胜一筹!

qwerz123 发表于 2024-1-15 15:23:08

我用这种方法遍历一个目录在第一次遍历的时候可以遍历出来路径下的文件,但是在第二次调用的时候就遍历不出来了文件了。重启后又可以遍历出来文件了,有知道为什么的吗

yukman 发表于 2024-2-27 15:46:27

qwerz123 发表于 2024-1-15 15:23
我用这种方法遍历一个目录在第一次遍历的时候可以遍历出来路径下的文件,但是在第二次调用的时候就遍历不出 ...

我和你一样的结果,老哥找到解决措施了嘛?

xin3684 发表于 2024-3-22 01:08:45

yukman 发表于 2024-2-27 15:46
我和你一样的结果,老哥找到解决措施了嘛?

第一次用fx_directory_first_full_entry_find,之后用fx_directory_next_full_entry_find就行了
页: [1]
查看完整版本: 关于 filex 遍历文件问题