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