如何使用FatFs获取SD卡根目录文件名并展示到LCD屏幕
FATFS 读取SD卡根目录文件名实现方法
你可以直接用f_opendir、f_readdir组合遍历根目录下的所有文件/目录,替换你代码中/* File Listing Code */标注的部分即可:
首先需要在代码块开头提前声明遍历需要的结构体变量:
FRESULT res; DIR dir; // 目录对象 FILINFO fno; // 文件信息结构体 char fileNameBuf[256]; // 存储读取到的文件名,可根据LCD显示需求调整长度
替换???部分的代码:
/* File Listing Code */ // 打开根目录,路径可以直接填挂载路径SDPath,或者填"/"表示根目录 res = f_opendir(&dir, SDPath); if (res != FR_OK) { // 打开目录失败处理,比如LCD显示"打开目录失败" goto end_of_list; // 可替换为自定义错误处理逻辑 } while (1) { // 读取下一个条目 res = f_readdir(&dir, &fno); if (res != FR_OK || fno.fname[0] == 0) { // 读取出错 或者 已经遍历完所有条目,退出循环 break; } // 过滤掉隐藏文件、系统文件、子目录(如果不需要展示子目录可保留该过滤逻辑) if (fno.fattrib & (AM_HID | AM_SYS | AM_DIR)) { continue; } // 读取到的文件名存储在fno.fname中,拷贝到显示缓存后即可调用LCD接口打印 strcpy(fileNameBuf, fno.fname); // 此处插入你的LCD单条文件名打印逻辑,示例:LCD_Print_Line(fileNameBuf); } // 关闭目录释放资源 f_closedir(&dir); end_of_list: ;
注意事项
- 如果你需要读取长文件名,需要提前在FATFS的配置文件
ffconf.h中开启长文件名支持:将FF_USE_LFN配置项设置为1或2(根据你的内存分配方式选择),否则默认只能读取8.3格式的短文件名 - 如果你需要遍历子目录,可以在判断到当前条目是目录(
fno.fattrib & AM_DIR为真)时,递归调用f_opendir打开子目录继续遍历 - 文件名的默认编码为GBK,如果你的LCD显示用的是UTF-8编码,需要自行做编码转换
内容的提问来源于stack exchange,提问作者daaarwiin
相关产品推荐
相关产品推荐

