1. 程式人生 > >FatFs-目錄下檔案掃描

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提供了一個工作磁碟模組,則不需要其他任何東西。
  • 為了將現有的具有不同介面的磁碟驅動器連線在一起,需要一些粘合功能來轉換FatFs和驅動程式之間的介面。

FatFs-目錄下檔案掃描

 

  • FatFs既不關心使用哪種儲存裝置,也不關心如何實現。只有一個要求是,它是一個用固定大小的塊讀取/寫入的塊裝置,可以通過上面定義的磁碟I/O函式訪問。

FatFs-目錄下檔案掃描

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; //返回狀態