打印

FatFs文件系统高级应用(一)

[复制链接]
1936|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xfcjava2|  楼主 | 2012-3-30 21:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(一)、获得指定路径下,指定格式的文件和文件夹的数量

/************************************************************************/****************************************************************************       
* 功    能:获得指定路径下,指定格式的文件和文件夹的数量
*---------------------------------------------------------------------------*
* 入口参数:path  : 要检索的文件路径 ;
*             name : 要检索的文件扩展名
*             result : 储存结果的数据区指针;
*                       其中:result[0]:文件数量;result[1]:文件夹数量
* 出口参数:NULL
****************************************************************************/

void Ex_GetFileAndDir_Number(char *path,char *name,INT16U *result)
{               
        FILINFO fno;       
        BYTE res,i;       
       
       
        result[0] = result[1] = 0;       
       
        res = f_opendir(&search_dir, path);       
       
        if (res) return;                   
       
        for(;;) {               
               
                res = f_readdir(&search_dir, &fno);
               
                if ((res != FR_OK) || !fno.fname[0])
                  break;
                  
                if (fno.fattrib & AM_DIR) {
                        result[1]++;
                } else {                       
                       
                       i=strlen(fno.fname);        //得到当前查询的文件名长度
          
                  if(i>4)//文件名的长度必须大于4(例如*.txt)
                  {                       
                                  //从文件名的倒数第4个的位置开始比较字符串:比较文件的后缀
                                         //不区分大小写比较,格式:例如.MP3         
                           if(my_memicmp(&fno.fname[i-4],name,4)==0)   
                           {
                                    result[0]++;
                           }                             
                  }          
                }               
        }       
       
}

相关帖子

沙发
xfcjava2|  楼主 | 2012-3-30 21:44 | 只看该作者
其中:
  /****************************************************************************       
* 功    能:将字符ch转换为小写英文字母
* 说    明:如果c为大写英文字母,则返回对应的小写字母;否则返回原来的值。
*---------------------------------------------------------------------------*
* 入口参数:ch:要转换的字符
*                  
* 出口参数:转换后的字符
*
****************************************************************************/

int my_tolower(char ch)
{

   if(ch >= 'A' && ch <= 'Z')
      return (ch + 0x20);
   return ch;
}



/****************************************************************************       
* 功    能:不区分大小写,比较内存区域buffer1和buffer2的count个字节
*---------------------------------------------------------------------------*
* 入口参数:buffer1:比较内存区域1指针 ;
*           buffer2:比较内存区域2指针 ;
*           count  :比较的字节数值
*                  
* 出口参数: 当buffer1 < buffer2时,返回值 < 0;
*            当buffer1 = buffer2时,返回值 = 0;
*            当buffer1 > buffer2时,返回值 > 0。
****************************************************************************/

int my_memicmp(const void *buffer1,const void *buffer2,int count)
{

    int m = 0;
    int n = 0;
   
    while (count--)
    {
        if ( (*(unsigned char *)buffer1 == *(unsigned char *)buffer2) ||

                ((m = my_tolower( *(unsigned char *)buffer1 )) ==

                (n =  my_tolower( *(unsigned char *)buffer2 ))) )

        {

          buffer1 = (char *)buffer1 + 1;
          buffer2 = (char *)buffer2 + 1;

        }
        else
           break;

    }

    return ( m - n );

}

使用特权

评论回复
板凳
user20120330| | 2012-3-30 21:52 | 只看该作者
好,不错的东东。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

449

帖子

42

粉丝