14 (fno.fattrib & AM_DIR) ? \'D\' : \'-\', // 是一个目录
15 (fno.fattrib & AM_RDO) ? \'R\' : \'-\', // 只读文件
16 (fno.fattrib & AM_HID) ? \'H\' : \'-\', // 隐藏文件
17 (fno.fattrib & AM_SYS) ? \'S\' : \'-\', // 系统文件
18 (fno.fattrib & AM_ARC) ? \'A\' : \'-\'); // 档案文件
19 }
20 return res_flash;
21 }
f_stat函数用于获取文件的属性,有两个形参,第一个参数为文件路径,第二个参数为返回指向文件信息结构体变量的指针。文件信息结构体变量包含文件的大小、最后修改时间和日期、文件属性、短文件名以及长文件名等信息。
路径扫描代码清单 25-12 路径扫描
1 static FRESULT scan_files (char* path)
2 {
3 FRESULT res; //部分在递归过程被修改的变量,不用全局变量
4 FILINFO fno;
5 DIR dir;
6 int i;
7 char *fn; // 文件名
8
9 #if _USE_LFN
10 /* 长文件名支持 */
11 /* 简体中文需要2个字节保存一个“字”*/
12 static char lfn[_MAX_LFN*2 + 1];
13 fno.lfname = lfn;
14 fno.lfsize = sizeof(lfn);
15 #endif
16 //打开目录
17 res = f_opendir(&dir, path);
18 if (res == FR_OK) {
19 i = strlen(path);
20 for (;;) {
21 //读取目录下的内容,再读会自动读下一个文件
22 res = f_readdir(&dir, &fno);
23 //为空时表示所有项目读取完毕,跳出
24 if (res != FR_OK || fno.fname[0] == 0) break;
25 #if _USE_LFN
26 fn = *fno.lfname ? fno.lfname : fno.fname;
27 #else
28 fn = fno.fname;
29 #endif
30 //点表示当前目录,跳过
31 if (*fn == \'.\') continue;
32 //目录,递归读取
33 if (fno.fattrib & AM_DIR) {
34 //合成完整目录名
35 sprintf(&path[i], "/%s", fn);
36 //递归遍历
37 res = scan_files(path);
38 path[i] = 0;
39 //打开失败,跳出循环
40 if (res != FR_OK)
41 break;
42 } else {