本帖最后由 林Ideal 于 2012-5-16 16:48 编辑
列举文件夹中文件逐个显示可以。先把所有文件名存入数组后再显示不行。什么问题啊!抓狂了!
代码如下:
typedef struct {
char *file_name[255]; //存放文件名用
u8 file_num; //文件个数
}FILE_INFO;
FILE_INFO file_info;
//列举文件
FRESULT scan_files (char* path)
{
FRESULT res;
FILINFO fno;
DIR dir;
char *fn;
u16 len = 0;
#if _USE_LFN
static char lfn[_MAX_LFN * (_DF1S ? 2 : 1) + 1];
fno.lfname = lfn;
fno.lfsize = sizeof(lfn);
#endif
res = f_mount(0, &fs); //加载文件系统
res = f_opendir(&dir, path);
if(res == FR_OK)
{
file_info.file_num = 0;
for(;;)
{
res = f_readdir(&dir, &fno);
if(res != FR_OK || fno.fname[0] == 0) break;
if(fno.fname[0] == '.') continue;
#if _USE_LFN
fn = *fno.lfname ? fno.lfname : fno.fname;
#else
fn = fno.fname;
#endif
if(fno.fattrib != AM_DIR)
{
for(len = 0; fn[len] != 0; len++);
if((fn[len - 4] == '.') && (fn[len - 3] == 's') && //是.s19文件
(fn[len - 2] == '1') && (fn[len - 1] == '9'))
{
file_info.file_name[file_info.file_num] = fn;
/*********************这样查找到一个显示一个就可以列出文件列表*************/
GUI_DispStringAt(file_info.file_name[file_info.file_num], 65, file_info.file_num * 20 + 20);
file_info.file_num++;
}
}
}
}
f_mount(0, NULL); //加载文件系统
/*************这样存起来外部显示就什么都没有显示******************/
// GUI_SetFont(&GUI_FontHZ16);
// GUI_DispStringAt(file_info.file_name[0], 20 + 40 + 5, 40);
// GUI_DispStringAt(file_info.file_name[1], 20 + 40 + 5, 60);
// GUI_DispStringAt(file_info.file_name[2], 20 + 40 + 5, 80);
// GUI_DispStringAt(file_info.file_name[3], 20 + 40 + 5, 100);
// GUI_DispStringAt(file_info.file_name[4], 20 + 40 + 5, 120);
while(1);
return res;
}
}
|