| 给你个实例,你看看吧: //***********************************************************************************
 //* 函数名称:Ex3_FilSearch
 //* 功    能:在指定路径下查找指定扩展名和检索号都相符的文件,
 //* 输入参数:
 //*     path  :要检索的文件路径
 //*     name  :要检索的文件扩展名
 //*     s_index: 要检索到的文件条目
 //* 输出参数:TRUE 成功   FALSE 出错
 //***********************************************************************************
 int Ex3_FilSearch(char *path,char *name,INT16U s_index)
 {
 FILINFO fno;
 FRESULT res;
 BYTE i;
 
 INT16U c_index=0;
 
 if(s_index==0) //要检索的条目:1...65535
 return FALSE;
 
 #if _USE_LFN
 fno.lfname = Lfname;
 fno.lfsize = sizeof(Lfname);
 #endif
 
 while (*name == ' ') name++; //skip the "space"
 
 
 res = f_opendir(&search_dir,path);
 
 if(res != FR_OK) {/*OS_EXIT_CRITICAL();*/return FALSE;}
 
 do
 {
 res = f_readdir(&search_dir,&fno);
 
 if(res != FR_OK)
 {/*OS_EXIT_CRITICAL();*/return FALSE;}
 if(fno.fname[0] == 0)
 break;
 i=strlen(fno.fname);        //得到当前查询的文件名长度
 
 if(i>4)//文件名的长度必须大于4(例如*.txt)
 {
 //从文件名的倒数第4个的位置开始比较字符串:比较文件的后缀
 if(my_memicmp(&fno.fname[i-4],name,4)==0) //不区分大小写比较,格式:例如.MP3
 c_index++;//找到1个符合条件的文件
 }
 
 }while(c_index<s_index);
 
 if(c_index==s_index )//找到符合条件的文件
 {
 #if _USE_LFN
 if(fno.lfname[0]!= 0)//如果长文件名有效
 {
 memcpy(Curr_Fil_buf,fno.lfname,50);
 xprintf(":Ofn<%s>\n",fno.lfname); // 输出指定长度的字符串, 超长时不截断, 不足时左对齐:
 }
 else//如果长文件名无效,输出短文件名
 {
 memcpy(Curr_Fil_buf,fno.fname,13);
 xprintf(":Ofn<%s>\n",fno.fname); // 输出指定长度的字符串, 超长时不截断, 不足时左对齐:
 
 }
 #else
 if(fno.fname[0]!= 0)
 {
 memcpy(Curr_Fil_buf,fno.fname,13);
 xprintf(":Ofn<%s>\n",fno.fname); // 输出指定长度的字符串, 超长时不截断, 不足时左对齐:
 }
 #endif
 
 return TRUE;
 }
 else
 {
 return FALSE;
 }
 
 
 }
 |