给你个实例,你看看吧:
//***********************************************************************************
//* 函数名称: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;
}
}
|