1.前言
读取SD卡根目录下文件夹的名字用到FATFS相关的API函数有如下:
1) f_mount--挂载SD
2) f_opendir--打开目录
3) f_readdir--读取目录
4 ) f_closedir--关闭目录
2.测试内容
在SD卡下我们先建立3个文件夹,名字分别命名为beijing chengdu shanghai。通过单片机读出这三个名字发给电脑,在串口显示助手查看读到的文件名,验证读取到的正确性。
图一
3.测试程序
/*
char* path: 要扫描的文件路径
char *buff: 存放读取到的文件夹名字
*/
u16 scan_files (char* path,char *buff)
{
static FILINFO fno; //文件信息结构体
fr = f_opendir(&dir, path); // 打开文件目录
if (fr == FR_OK) {//如果打开成功循环读出文件名字到buff中
for (;;) { //循环读出文件名字,循环次数等于SD卡根目录下的文件数目
fr = f_readdir(&dir, &fno); //读取文件名
if (fr != FR_OK || fno.fname[0] == 0) break; //读取错误或者读完所有文件结束就跳出循环
if (fno.fattrib & AM_DIR)//读取的是文件夹名字
{
strcpy(buff, fno.fname); //复制文件名字到缓存并打印文件名
printf("%s\r\n",buff);
}
}
f_closedir(&dir);//关闭文件目录
}
return fr;// 返回
}
int main (void)
{
FRESULT fr; //读文件返回值
FATFS fs; //记录文件盘符结构体
DIR dir; //
char dirbuff[255]; //存储读到的文件名
fr=f_mount(&fs,"0:",1);//挂载SD卡 挂载成功返回FR_OK,错误返回错误值
if(fr==FR_OK) //如果挂载成功扫描文件路径
{
scan_files("",dirbuff); //""是sd卡根目录路径
}
else
{
重新挂载
}
while(1)
}
3.调试说明:
SD卡根目录下固定有个文件夹名字是 System Volume Information。你在SD卡下建立三个文件夹的话,实际读出4个文件夹,其中第一个读出的文件夹的名字就是System Volume Information。
4.测试结果:
1)在电脑查看SD卡根目录文件夹。
在网上下载Winhex软件,以管理员身份运行,打开SD卡盘符,可以看到根目录下的文件夹如下所示:
图二
2) 程序调试窗口输出的结果如下所示。
第一个输出的文件如下所示:
图三
自己新建的三个文件如下图:
图四
图五
图六
3) 电脑串口助手输出的结果如下所示。
图七