我现在想读取SD卡的根目录下“相册”文件夹下的所有bmp格式的文件名,程序如下:
void get()
{
FATFS fs;
FIL fsrc;
FILINFO finfo; /
DIR dirs;
char lfn[70];
char *result;
char pathbmp[100]={"相册"}; //在根目录下有一个 相册 文件夹
char j;
finfo.lfname=lfn;
finfo.lfsize=sizeof(lfn);
f_mount(0,&fs);
if(f_opendir(&dirs,pathbmp)==FR_OK) //打开指定目录
{
while(f_readdir(&dirs,&finfo)==FR_OK) //循环调用,依次读取文件名
{
if(finfo.fattrib&AM_ARC) //判断是不是存档型文档
{
if(finfo.lfname[0]==NULL&&finfo.fname[0]!=NULL)
finfo.lfname=finfo.fname;
if(!finfo.lfname[0])
{
bmpnum=bmpjj;
bmpjj=0;
j=0;
break; //文件名为空即到达了目录尾部
}
//判断是否为bmp
result=strstr(finfo.lfname,".bmp");
if(result!=NULL)
{
for(j=0;finfo.lfname[j]!=NULL;j++)
{
AllBmpName[bmpjj][j]=finfo.lfname[j];
}
bmpjj++;
}
}
}
}
...........
}
之前用同样的方法成功获得了“音乐”文件夹下的mp3文件名,支持长文件名,这里的情况是只能读出一个文件名而且是短文件名,接着就break了,跟踪发现是在
f_readdir(&dirs,&finfo)里面的dir_read函数执行后lfn_idx变成了0xffff,之后也是因为lfn_idx为0xffff,导致虽然读出了其他的文件名,但是第一个字符给了0x00 所以才break,
请教下
dir_read 里面lfn_idx为什么变成0xffff?之前在读别的文件夹的时候没有问题.......谢谢了
|