FATFS 查看文件列表代码(包括所有的子目录) scan_files

FATFS 查看文件列表代码(包括所有的子目录) scan_files

// An highlighted block
FRESULT scan_files1 (char* path)
{
	char path_other[255]={0};//目录 长度
	char mydir[50][255];//最多50个文件  长度255
    FRESULT res;
    FILINFO fno;
    DIR dir;
    int i=0 ,j;
    char *fn;
#if _USE_LFN
    char lfn[_MAX_LFN *  2  + 1]={0};
    fno.lfname = lfn;
    fno.lfsize = sizeof(lfn);
#endif
 
 
    res = f_opendir(&dir, path);
    if (res == FR_OK) {
        for (;;) 
		{
            res = f_readdir(&dir, &fno);
            if (res != FR_OK || fno.fname[0] == 0) 
			{
				break;
			}
            if (fno.fname[0] == '.') 
			{
				continue;
			}
#if _USE_LFN
            fn = *fno.lfname ? fno.lfname : fno.fname;
#else
            fn = fno.fname;
#endif
            if ((fno.fattrib & AM_DIR) && (fno.fname[0] != '.') && (fno.lfname[0] != '.')) 
			{
				memset(path_other, 0, sizeof(path_other));
				#if _USE_LFN
						sprintf(path_other, "%s/%s", path,(*fno.lfname) ? fno.lfname : fno.fname);
				#else
						sprintf(path_other, "%s/%s", path, fno.fname);
				#endif
				//scan_files2(path_other);
				for(j=0;j<255;j++)
				{
					mydir[i][j] = path_other[j];
				}
				if(i>=50)//50¸öÎļþ
					break;
				i++;
            } 
			else 
			{
                printf("%s/%s--%ld\n", path, fn ,fno.fsize);
            }			
        }
		res = f_closedir(&dir);//解决 bug
		for(j=0;j<i;j++)
		{
			scan_files2(mydir[j]);
		}
    }
	else
		printf_fatfs_error(res);  //调试 可以不要
    return res;
}
FRESULT scan_files2 (char* path)
{
	char path_other[20];
    FRESULT res;
    FILINFO fno;
    DIR dir;
    char *fn;
#if _USE_LFN
    static char lfn[_MAX_LFN *  2  + 1];
    fno.lfname = lfn;
    fno.lfsize = sizeof(lfn);
#endif
 
 
    res = f_opendir(&dir, path);
    if (res == FR_OK) {
        for (;;) 
		{
            res = f_readdir(&dir, &fno);
            if (res != FR_OK || fno.fname[0] == 0) break;
            if (fno.fname[0] == '.') continue;
#if _USE_LFN
            fn = *fno.lfname ? fno.lfname : fno.fname;
#else
            fn = fno.fname;
#endif
            if ((fno.fattrib & AM_DIR) && (fno.fname[0] != '.') && (fno.lfname[0] != '.')) 
			{
                sprintf(path_other, "%s/%s",path, fn);//  可以进行多级目录扫描
				//printf("path_other=%s\n",path_other);
                res = scan_files(path_other);
                if (res != FR_OK) 
				  break;
            } 
			else 
			{
                printf("%s/%s--%ld\n", path, fn ,fno.fsize);
            }
        }
		res = f_closedir(&dir);//½â¾ö bug   解决 打开目录太多 无法显示
    }
    return res;
}

2种都是 多级目录扫描
第一种 是按照目录层级扫描
第二种 的按照顺序扫描
推荐第一种

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值