野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2755|回复: 1

scan_files函数执行结果不对

[复制链接]
发表于 2023-5-6 19:57:23 | 显示全部楼层 |阅读模式
我照这书上的代码进行了书上的"FatFs功能使用实验.
前面的两上函数static FRESULT miscellaneous(void)和static FRESULT file_check(void)执行结果都有正确的.
但第三个函数static FRESULT scan_files(char* path) 扫描盘上的文件时却出错.
函数的这一行
    printf("%s/%s\r\n", path, fn);
执行的结果却打印文件名.只打钱出一个点,其它都是不可打印字符.十六进制显示是这样的:
FF FF FF FF FF FF FF FF 2E FF FF FF 0A
哪位大神能解释一下为什么会这样.多谢!!!



回复

使用道具 举报

发表于 2023-5-8 08:35:29 | 显示全部楼层
        for (;;){
            //读取目录下的内容,再读会自动读下一个文件
            res = f_readdir(&dir, &fno);
            //为空时表示所有项目读取完毕,跳出
            if (res != FR_OK || fno.fname[0] == 0) break;
#if _USE_LFN
            fn = *fno.lfname ? fno.lfname : fno.fname;
#else
            fn = fno.fname;
#endif
            //点表示当前目录,跳过
            if (*fn == '.') continue;
            //目录,递归读取
            if (fno.fattrib & AM_DIR){
                //合成完整目录名
                sprintf(&path[i], "/%s", fn);
                //递归遍历
                res = fatfs_scan_files(path);
                //printf("文件编号%d到这里\r\n",file_num);
                path[i] = 0;
                //打开失败,跳出循环
                if (res != FR_OK)
                    break;
            }else{
                printf("%d.%s/%s\r\n", ++file_num,path, fn);//输出文件名
                sprintf(absolute_path,"%s/%s",path,fn);
                strcpy(all_file_list[file_num-1],absolute_path);    // 保存文件绝对路径到列表
            }//else end
        } //for end
点文件名需要排除的,估计你打印的是默认文件系统的第一个文件名,没有继续循环
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:46 , Processed in 0.029999 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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