野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13557|回复: 5

求助,文件系统的文件遍历

[复制链接]
发表于 2016-11-3 08:55:49 | 显示全部楼层 |阅读模式
代码如下
  1. void FATFS_File_Check(void)
  2. {
  3.   char * result1, *result2 , *result3 , *result4;
  4.   char     lfn[70];
  5.   FRESULT res;

  6.   File_Status.File_Total = 0;//清零总数,重新读取
  7.   finfo.lfname = lfn;          //为长文件分配空间
  8.   finfo.lfsize = sizeof(lfn);  //分配的空间大小
  9.   
  10.   if(res != FR_OK)
  11.   {
  12.     res = FR_OK;
  13.   }
  14.   res = f_open(&fsrc , "1:lololo.wav" , FA_READ);//执行到這里的时候,返回值是fr_OK
  15.   res = f_close(&fsrc);
  16.   if(f_opendir(&dirs , "1:") == FR_OK) //打开根目录
  17.   {
  18.     while(f_readdir(&dirs , &finfo) == FR_OK)  //遍历文件
  19.     {
  20.       if(finfo.fattrib & AM_ARC)
  21.       {
  22.         if((finfo.lfname[0] == NULL) && (finfo.fname != NULL)) //当长文件为空时,短文件名非空时转换
  23.         {
  24.           finfo.lfname = finfo.fname;
  25.         }
  26.         
  27.         if(!finfo.lfname[0])//文件名为空时退出
  28.         {
  29.           File_Status.File_Disp = 1;           //外部显示信息
  30.           break;
  31.         }
  32.         
  33.         //判断文件是不是音频文件
  34.         result1 = strstr(finfo.lfname , ".mp3");
  35.         result2 = strstr(finfo.lfname , ".mid");
  36.         result3 = strstr(finfo.lfname , ".wav");
  37.         result4 = strstr(finfo.lfname , ".wma");
  38.         if((result1 != NULL) || (result2 != NULL) ||
  39.            (result3 != NULL) || (result4 != NULL))
  40.         {
  41.           File_Status.File_Total++;
  42.           File_Status.info[File_Status.File_Total].Name = finfo.lfname;//保存名字信息
  43.           File_Status.info[File_Status.File_Total].Time = finfo.fsize; //保存文件大小
  44.         }
  45.       }
  46.     }
  47.   }
  48. }
复制代码
里面有两个文件,一个是record.txt和lololo.wav,但是文件系统总是只能找到record.txt而不能找到lololo.wav。程序哪儿出错了吗?求大牛解答。



大召唤术~~~~~

回复

使用道具 举报

 楼主| 发表于 2016-11-3 09:11:14 | 显示全部楼层
单步调试,发现每次找文件的时候

读取出来的第0位都是0,后面几个字节的信息是正确的。

QQ截图20161103090749.png
回复 支持 反对

使用道具 举报

发表于 2016-11-3 09:12:02 | 显示全部楼层
把wav的判断加上大写的“WAV”试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-3 09:24:43 | 显示全部楼层
巢易白 发表于 2016-11-3 09:12
把wav的判断加上大写的“WAV”试试

错误发生在,while第二次循环的时候,读取出来的文件信息,文件名的第0位被默认设置为0了,這样就导致,在判断是否还有文件if(!finfo.lfname[0])就成立,就退出循环了,而我那个目录下还有第二个文件。
回复 支持 反对

使用道具 举报

发表于 2016-11-3 10:33:44 | 显示全部楼层
Sunwaz 发表于 2016-11-3 09:24
错误发生在,while第二次循环的时候,读取出来的文件信息,文件名的第0位被默认设置为0了,這样就导致, ...

可以对比下火哥的scanf file 全盘扫描的递归函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-3 13:08:46 | 显示全部楼层
巢易白 发表于 2016-11-3 10:33
可以对比下火哥的scanf file 全盘扫描的递归函数

好的。我去看看
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 10:55 , Processed in 0.028462 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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