硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1831|回复: 5
收起左侧

[FileX] 关于 filex 遍历文件问题

[复制链接]

10

主题

92

回帖

122

积分

初级会员

积分
122
发表于 2022-9-22 10:29:34 | 显示全部楼层 |阅读模式
这几天移植了 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;
        }
    }
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106541
QQ
发表于 2022-9-22 11:11:52 | 显示全部楼层
遍历子目录,要用这个函数设置下



回复

使用道具 举报

10

主题

92

回帖

122

积分

初级会员

积分
122
 楼主| 发表于 2022-9-26 09:31:02 | 显示全部楼层
谢谢回复!这个函数我已经有调用了,就是不起作用。已经用回fat,无论是速度,易用性 fat都更胜一筹!
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-1-15 15:23:08 | 显示全部楼层
我用这种方法遍历一个目录在第一次遍历的时候可以遍历出来路径下的文件,但是在第二次调用的时候就遍历不出来了文件了。重启后又可以遍历出来文件了,有知道为什么的吗
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-2-27 15:46:27 | 显示全部楼层
qwerz123 发表于 2024-1-15 15:23
我用这种方法遍历一个目录在第一次遍历的时候可以遍历出来路径下的文件,但是在第二次调用的时候就遍历不出 ...

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

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-3-22 01:08:45 | 显示全部楼层
yukman 发表于 2024-2-27 15:46
我和你一样的结果,老哥找到解决措施了嘛?

第一次用fx_directory_first_full_entry_find,之后用fx_directory_next_full_entry_find就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-24 08:08 , Processed in 0.182050 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表