完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想把SD卡根目录下的文件夹名和歌曲分别保存在两个二维数组中,这两个函数分别扫描出文件夹名和歌曲名,但是不知道什么原因在扫描完歌曲的时候用来保存文件夹名字的数组里面也被赋值进歌曲的名字,先执行scan_root_folder();,然后执行scan_song();在红色的地方song_name_buf[song_num][j] = finfo.fname[j];这句注释掉文件夹名字的数组就不会有歌曲的值还是原来执行scan_root_folder();的值,但是没有找到文件夹名字数组在scan_song();里有赋值的地方,不胜感激~
/******************************************************** 函数名称:void scan_root_folder(void) 功能描述:列举根目录下文件夹 全局变量:folder_name_buf[][13]:根目录文件夹缓存区; folder_total_num:文件夹总数 参数说明:无 返回值: 无 说明: 得到根目录下文件夹总数以及保存文件夹名称到folder_name_buf[][13] folder_name_buf[1][13]为根目录 *********************************************************/ void scan_root_folder(void) { FATFS fs; FILINFO finfo; DIR dirs; FRESULT res; // FatFs function common result code u8 i, j; u8 root_name[13] = {"/"};//根目录名称 u8 folder_num = 0;//当前文件夹序号 f_mount(0, &fs);//卸载或挂在一个逻辑驱动器 for(j = 0; j < 14; j++)//存根目录名称到folder_name_buf[1][] { folder_name_buf[1][j] = root_name[j]; } res = f_opendir(&dirs, (TCHAR*)&folder_name_buf[folder_name_num][0]); //打开文件目录 if(res == FR_OK) { printf("rnrn%20srn", "-----------文件夹列表-----------"); printf("rn%s", &folder_name_buf[1][0]); //根目录 while((f_readdir(&dirs, &finfo) == FR_OK) && finfo.fname[0]) { i = strlen(finfo.fname); if(finfo.fattrib & AM_DIR)//如果是文件夹 { folder_num++; for(j = 0;j < 14;j++) { folder_name_buf[folder_num + 1][j] = finfo.fname[j]; } printf("rn%s", &folder_name_buf[folder_num + 1][0]); //其他文件夹 //printf("rn%s/%s", path, &finfo.fname[0]); switch(i)//作用:输出文件名左对齐 { case 1:printf(" "); case 2:printf(" "); case 3:printf(" "); case 4:printf(" "); case 5:printf(" "); case 6:printf(" "); case 7:printf(" "); case 8:printf("%15s"," "); } } else { } } if(folder_num == 0)//无文件夹 { printf("rn%srn","<无文件夹>"); printf("rnrn%s%srn","文件夹总计:", "0"); } else { printf("rnrn%s%drn","文件夹总计:", (folder_num + 1)); } } f_mount(0, NULL); folder_total_num = (folder_num + 1); //总文件夹数加上根目录 } /******************************************************** 函数名称:void scan_song(void) 功能描述:列举指定目录下歌曲文件 全局变量:folder_name_buf[][13]:根目录文件夹缓存区;song_name_buf[][13]:歌曲名称缓存区 song_total_num:歌曲总数;folder_name_num:当前文件夹序号 参数说明:无 返回值: 无 说明: 得到当前文件夹下歌曲总数以及保存当前文件夹下歌曲到song_name_buf[][13] *********************************************************/ void scan_song(void) { FATFS fs; FILINFO finfo; DIR dirs; FRESULT res; // FatFs function common result code u8 i, j, n; u8 song_num = 0;//当前歌曲序号 f_mount(0, &fs);//卸载或挂在一个逻辑驱动器 for(n = 0; n <= song_total_num; n++)//先清除文件夹缓存区中上一个文件夹下歌曲名称 { for(j = 0; j < 14; j++) { song_name_buf[n][j] = 0; } } res = f_opendir(&dirs, (const TCHAR*)&folder_name_buf[folder_name_num][0]); //打开目录 if (res == FR_OK) { printf("rnrn%20srn", "-----------歌曲列表-----------"); while((f_readdir(&dirs, &finfo) == FR_OK) && finfo.fname[0]) { i = strlen(finfo.fname);//名字长度 if(finfo.fattrib != AM_DIR) { if(((finfo.fname[9] == 'W') && (finfo.fname[10] == 'M') && (finfo.fname[11] == 'A')) || ((finfo.fname[9] == 'M') && (finfo.fname[10] == 'P') && (finfo.fname[11] == '3')) || ((finfo.fname[9] == 'W') && (finfo.fname[10] == 'A') && (finfo.fname[11] == 'V'))) { song_num++; for(j = 0;j < 14;j++) { song_name_buf[song_num][j] = finfo.fname[j]; } printf("rn%s/%s", (const TCHAR*)&folder_name_buf[folder_name_num][0], &song_name_buf[song_num][0]); switch(i)//作用:输出文件名左对齐 { case 1:printf(" "); case 2:printf(" "); case 3:printf(" "); case 4:printf(" "); case 5:printf(" "); case 6:printf(" "); case 7:printf(" "); case 8:printf("%15s"," "); } } } else { } } if(song_num == 0)//无歌曲文件 { printf("rn%srn","<无歌曲文件>"); printf("rnrn%s%srn","歌曲文件总计:", "0"); } else { printf("rnrn%s%drn","歌曲文件总计:", song_num); } } f_mount(0, NULL); song_total_num = song_num; } |
|
相关推荐
7个回答
|
|
|
|
|
|
单独放在一个.c文件里,把所有的全局变量都放在一个文件里,现在可以了,不过把歌曲名保存起来还是很占空间的。
|
|
|
|
还有一个问题,我现在用的fatfs没有用长文件名,发现有些歌曲不能播放,但是改一个名字可能就可以播放了,是不是这种挑歌问题是因为没有支持长文件名而引起的呢?
|
|
|
|
你测试一下.如果是长文件名的问题,应该只要是长文件名都不行.
|
|
|
|
是和名字有关系,但是好像不是长短的问题,我的这首歌是K歌之王.MP3,用上面的函数扫描不出来,我把名字改成A.MP3也同样播放不出来,改成歌之王.MP3也播放不出来,改成测试.MP3就可以被扫描出来,随便打的名字有些可以有些不可以。超过8个汉字有的也可以播放。
|
|
|
|
这种情况建议用jtag调试一下.
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1927浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
712浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
562浏览 3评论
584浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 05:41 , Processed in 0.858523 second(s), Total 89, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号