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 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; //返回状态