OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7574|回复: 6

FATFS的 f_readdir 小疑问

[复制链接]

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
发表于 2012-12-3 13:38:47 | 显示全部楼层 |阅读模式
我知道f_readdir 是配合 f_opendir用来读取文件夹的,但是怎么有时候在网上看到他们用这个语句能把文件也读出来啊?
    我使用这个语句,能把我SD卡中的文件夹的名字都读出来,但是文件就不能读出来了。
         能不能支个招怎么才能把目录下的所有文件都读出来啊?(最好是把目录下的所有文件同文件夹一起读出来)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

263

主题

455

帖子

1

精华

禁止访问

积分
1212
金钱
1212
注册时间
2011-9-25
在线时间
12 小时
发表于 2012-12-3 13:49:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-12-3 15:09:28 | 显示全部楼层
回复【2楼】syhx8262516:
---------------------------------
这个程序是读文件夹的吧,貌似文件读不出来。我也是用差不多的程序写的,只能把文件夹名称读出来,并不能把文件的名称读出来。
   我想把某个文件夹或者根目录里面的文件读出来(文件夹的话,可有可无的,主要是文件的文件名)
回复 支持 反对

使用道具 举报

头像被屏蔽

263

主题

455

帖子

1

精华

禁止访问

积分
1212
金钱
1212
注册时间
2011-9-25
在线时间
12 小时
发表于 2012-12-3 15:31:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-12-3 16:10:45 | 显示全部楼层
回复【4楼】syhx8262516:
---------------------------------
我搜索到了原子的一个程序,和你的,和我的也都差不多,不过可以读全部文件(文件和文件夹)
   但是我的程序只能读文件夹,我也不清楚怎么回事了,我把程序贴出来,麻烦你帮我看看可以吗?
  其中  i0=80  的
    
f_opendir(&dir,"");

while(i0--)
{
res=f_readdir(&dir,&filinfo);
if(filinfo.fname[0]==0) break;

if(filinfo.fattrib & AM_DIR)
{
 if(i<80)
 {
  strncpy(buffer,filinfo.fname,13);
printf("%s\n",buffer);
i++;
 }
}
}
回复 支持 反对

使用道具 举报

23

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-10-24
在线时间
0 小时
 楼主| 发表于 2012-12-3 17:20:54 | 显示全部楼层
回复【4楼】syhx8262516:
---------------------------------
我明白了。主要是这条语句造成的 if(filinfo.fattrib & AM_DIR) 
   判断文件属性,如果是DIR,就输出,所以导致只显示文件夹出来,如果把这句去掉,就能显示全部文件了。
    谢谢你花时间给我解答
回复 支持 反对

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
发表于 2016-11-7 21:23:42 | 显示全部楼层
RESULT scan_files (char* path)
{
   FRESULT res;
   FILINFO fno;
//         u8 count=0;
   DIR dir;
   int i;
   char *fn;
#if _USE_LFN
   fno.lfsize = _MAX_LFN * 2 + 1;
         fno.lfname = mymalloc(fno.lfsize);
#endif
   res = f_opendir(&dir, path);
   if (res == FR_OK)
                 {
                 printf("\r\n");
       i = strlen(path);
       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
           printf("%s\r\n",fn);
//                                                if(count<8)
//                                                {
//                                                        OLED_ShowString(0,count,fn,8);
//                                                       
//                                                }
//                                                count++;
                                         
                                         
           }
//                                        count=0;
                                       
       }
   return res;
}亲测好用的代码。
新手的路还很长
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 00:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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