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种都是 多级目录扫描
第一种 是按照目录层级扫描
第二种 的按照顺序扫描
推荐第一种