第25章 串行FLASH文件系统FatFs (14)

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 {

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzsjd.html