_findnext x64报错

x64位下_findnext函数错误修复

用 _findfirst 和 _findnext 查找文件:

    long handle;
    struct _finddata_t fileinfo;

    nsFile = nsPath + "*.xyz";
    handle = _findfirst(nsFile.c_str(), &fileinfo);
    if (handle == -1)
        return -1;
    do
    {

    } while (!_findnext(handle, &fileinfo));

    _findclose(handle);

 

之前的程序没问题,移植到x64位 _findnext(handle,&fileinfo) 报错。

error :0xC0000005: 写入位置 0xFFFFFFFFAE1B1940 时发生访问冲突。

solution:  long handle; 改为 intptr_t handle; //x64

### FatFs `f_findnext` 函数使用说明 #### 功能描述 `f_findnext` 是用于继续从上次调用 `f_findfirst` 或者 `f_findnext` 开始搜索下一个匹配条目的函数。此功能允许遍历指定路径下的所有文件和子目录。 - 参数 `dp` 指向由 `f_findfirst` 函数创建的有效目录对象的指针[^1]。 - 参数 `fno` 指向文件信息结构体的指针,用来保存所发现项目的详情,比如名称、大小和其他属性等。 当成功定位到一个新的项目时,其详细资料会被填充至传入的对象中;而一旦到达列表末端或是遇到错误情况,则会在 `fno->fname[]` 中留下空白字符串作为标志。 #### 返回值解释 可能返回如下状态码来指示操作的结果: - **FR_OK**: 成功找到了新的条目; - **FR_DISK_ERR**, **FR_INT_ERR**, **FR_NOT_READY**, **FR_INVALID_OBJECT**, **FR_TIMEOUT**, **FR_NOT_ENOUGH_CORE**: 表明发生了不同类型的错误,具体含义可查阅官方文档获取更多信息。 #### 示例代码展示 下面是一个简单的例子展示了如何利用这两个 API 来枚举给定路径中的所有文件名: ```c #include "ff.h" void list_files(const char* path){ DIR dir; FILINFO fno; if(f_opendir(&dir, path) != FR_OK){ puts("Failed to open directory"); return ; } while(1){ FRESULT res = f_findnext(&dir,&fno); if(res != FR_OK || !fno.fname[0]) break; // End of search or error occurred printf("%s\n", fno.fname); } } ``` 这段程序会尝试打开一个目录,并通过循环不断调用 `f_findnext()` 方法直到找不到更多项为止,在每次迭代过程中打印当前找到的名字。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值