FatFs-目录下文件扫描

时间:2022-07-23
本文章向大家介绍FatFs-目录下文件扫描,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

FatFs - 通用的FAT文件系统模块

FatFs是用于小型嵌入式系统的通用FAT/exFAT文件系统模块。FatFs模块是按照ANSI C (C89)编写的,完全独立于磁盘I/O层。因此它是独立于平台的。在资源有限的情况下,可以集成到小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。这里也提供了用于微型微控制器的Petit FatFs模块。

官方网站:http://elm-chan.org/fsw/ff/00index_e.html

特性

  • DOS/Windows兼容的FAT/exFAT文件系统。
  • 平台独立的。容易端口。
  • 程序代码和工作区域占用的空间非常小。
  • 各种配置选项,以支持:
  • 长文件名在ANSI/OEM或Unicode。
  • exFAT文件系统。
  • 线程安全的RTOS。
  • 多个卷(物理驱动器和分区)。
  • 变量扇区大小。
  • 多个代码页,包括DBCS。
  • 只读,可选的API, I/O缓冲区等等…

带有FatFs模块的嵌入式系统的典型配置,但不是特定的配置。

  • 如果为FatFs提供了一个工作磁盘模块,则不需要其他任何东西。
  • 为了将现有的具有不同接口的磁盘驱动器连接在一起,需要一些粘合功能来转换FatFs和驱动程序之间的接口。
  • FatFs既不关心使用哪种存储设备,也不关心如何实现。只有一个要求是,它是一个用固定大小的块读取/写入的块设备,可以通过上面定义的磁盘I/O函数访问。

Fatfs文件夹移植

目录下文件扫描

FATFS fatsd; //定义文件系统对象结构
f_mount(&fatsd,"0:",1); //挂载SD卡
FRESULT scan_files(char *path)
{
	FRESULT res; //定义结果对象
	DIR dir; //定义目录对象
	UINT i; //定义变量
	static FILINFO fno; //定义静态文件信息结构对象
	res = f_opendir(&dir,path); //打开目录,返回状态 和 目录对象的指针
	char pathBuff[256]; //定义路径数组
	if(res == FR_OK) //打开成功
	{
		for(;;) //遍历
		{
			res = f_readdir(&dir, &fno); //读取目录,返回状态 和 文件信息的指针
			if(res != FR_OK || fno.fname[0] == 0) 
 break; //若打开失败 或 到结尾,则退出
			if(fno.fattrib & AM_DIR) //是目录
			{
				i = strlen(path); //获取原目录长度
				sprintf(&path[i],"/%s",fno.fname); //将新目录添加在原目录后面
				printf("是目录::%s
",path);
				res = scan_files(path); //将新目录进行递归调用
				if(res != FR_OK) break; //打开失败则退出
				path[i] = 0; 
			}else
			{
				printf("是文件:%s/%s
",path,fno.fname); //是文件
				//strcpy(pathBuff, fno.fname); //将文件目录存储起来
			}
		}
	}
	else
	{
		printf("失败 - %s
",&res); //打开失败
	}
	f_closedir(&dir); //关闭目录
	return res; //返回状态