利用fatfs文件系统,
如何输出SD卡根目录下的各个文件夹名字呢?
程序如下:
u8 Dirname_i; u8 Dirname_j; DIR dir; //读取txt里的目录用,还是要把fatfs看懂才行呀![] FILINFO f_info; exfuns_init(); res=f_mount(fs[0],"0:",1); //挂载sd卡,,, //下面我想得到文件夹的名字 //以下代码实现读取根目录下所有的子目录名(短文件名)并保存到数组Dirname[MAXDIR][13]中,后来我把这个数组改成了Dirname[80][13] // #define MAXDIR 80; if(f_opendir(&dir,"")!=FR_OK) { //错误处理代码... } for(Dirname_i=0;Dirname_i<80;Dirname_i++) //把Dirname数组清零,用于装文件夹名.其实这个可以省略,因为当定义好Dirname[][]的时候,它就是空的 { for(Dirname_j=0;Dirname_j<13;Dirname_j++) { Dirname[Dirname_i][Dirname_j]=0; } } maxdir=1; while(1) { if(f_readdir(&dir,&f_info)==FR_OK) //还是不太清楚,就连fatfs最基本的格式都不清楚。???? { if(f_info.fname[0]==0)break; //这里代表读完了所有的文件夹目录????因为调用一次f_readdir(),就会输出一个文件夹名,如果把所有的文件夹名都输出了,那么就会输出一个空的字符串,这里就是判断是否输出的是空字符串. } else break; //如果读取目录出错,也要跳出了.???? if(f_info.fattrib&AM_DIR) //目录,有目录可以提取. { if(maxdir<80) { strncpy(&Dirname[maxdir][0],f_info.fname,13); //把目录提取出来放到Dirname的一行里 maxdir++; //进行加加,预计能提取80个,因为我们这个循环是80次的. } else break; } } ...
仿真结果:
下面用电脑打开SD卡进行验证: