天天看點

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; //傳回狀态