OpenEdv-开源电子网

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

f_readdir()函数读出的短文件名 fno.fname[0]为0 !求助

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2012-7-30
在线时间
0 小时
发表于 2012-8-15 19:08:25 | 显示全部楼层 |阅读模式

想利用 f_readdir()函数扫描 根目录下的 音频文件,第一个文件命名为0001,第二个是0002,但第一个读取 播放正常,第二个无法播放,在电脑上能正常识别和播放。通过断点设置发现fno.fname[0]为0,fno.fname[1] = 0,fno.fname[2] = 0,fno.fname[3] = 2后面的也正常,就是短文件名的第一个字母怎么成了0了呢?
请各位大侠帮我分析一下,给些指点,谢谢!
下面是我浏览根目录程序的一部分      
if(f_opendir(&dir,path)== FR_OK)
        {
          while(f_readdir(&dir, &fno)== FR_OK)
          {
            if(fno.fattrib & AM_ARC)
            {
              if(fno.lfname[0]==NULL && fno.fname[0]!= 0 )fno.lfname = fno.fname;
              if(!fno.fname[0])break;             
              printf("%s\n",fno.lfname);

请大家指教!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-15 21:07:43 | 显示全部楼层
 //遍历文件
 //path:路径
 //返回值:执行结果
u8 mf_scan_files(u8 * path)
{
FRESULT res;   
    char *fn;   /* This function is assuming non-Unicode cfg. */
#if _USE_LFN
  fileinfo.lfsize = _MAX_LFN * 2 + 1;
fileinfo.lfname = mymalloc(SRAMIN,fileinfo.lfsize);
#endif   

    res = f_opendir(&dir,(const TCHAR*)path); //打开一个目录
    if (res == FR_OK) 
{
printf("\r\n"); 
while(1)
{
        res = f_readdir(&dir, &fileinfo);                   //读取目录下的一个文件
        if (res != FR_OK || fileinfo.fname[0] == 0) break;  //错误了/到末尾了,退出
        //if (fileinfo.fname[0] == '.') continue;             //忽略上级目录
#if _USE_LFN
         fn = *fileinfo.lfname ? fileinfo.lfname: fileinfo.fname;
#else    
         fn = fileinfo.fname;
#endif                                               /* It is a file. */
printf("%s/", path);//打印路径
printf("%s\r\n",  fn);//打印文件名   

    }   
myfree(SRAMIN,fileinfo.lfname);
    return res;   
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2013-8-21
在线时间
0 小时
发表于 2013-8-21 20:06:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我发现把长文件名关掉后就能读取50MB的那个文件了,什么情况,不科学
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-21 21:40:57 | 显示全部楼层
是你的文件系统还没移植好长文件名支持部分吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-8-15
在线时间
0 小时
发表于 2013-11-26 13:27:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问原子哥,f_opendir(&dir,(const TCHAR*)path); 函数中的dir是指向什么的啊?这个函数是按照path路径能打开一个目录,是否还可以用来创建一个新目录呢
回复 支持 反对

使用道具 举报

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-8-15
在线时间
0 小时
发表于 2013-11-26 13:36:45 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
if (fileinfo.fname[0] == '.') continue; 这句忽略上级目录是什么意思啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-27 00:47:21 | 显示全部楼层
回复【6楼】专注:
---------------------------------
这你就要去学习下FAT文件系统了
在FAT文件系统里面'.'代表上级目录,也就是返回上一级目录.而'..'表示当前目录.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

187

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2012-6-4
在线时间
120 小时
发表于 2017-12-15 15:22:47 | 显示全部楼层
正点原子 发表于 2013-11-27 00:47
回复【6楼】专注:
---------------------------------
这你就要去学习下FAT文件系统了
在FAT文件系统里面'. ...

不对吧。.是当前目录,..上上级目录。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 21:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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