天天看点

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
FatFs-目录下文件扫描

特性

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