STM32Fatfs遍歷檔案的兩種方法
//遍歷檔案 //path:路徑 //返回值:執行結果 u8 mf_scan_files(u8 * path) { FRESULT res; char *fn; /* This function is assuming non-Unicode cfg. */ char *p; #if _USE_LFN fileinfo.lfsize = _MAX_LFN * 2 + 1; fileinfo.lfname = mymalloc(SRAMIN,fileinfo.lfsize); #endif res = f_opendir(&DirInfo,(const XCHAR*)path); //開啟一個目錄 if (res == FR_OK) { printf("\r\n"); while(1) { res = f_readdir(&DirInfo, &FilInfo); //讀取目錄下的一個檔案 if (res != FR_OK || FilInfo.fname[0] == 0) break; //錯誤了/到末尾了,退出 #if _USE_LFN fn = *fileinfo.lfname ? fileinfo.lfname : fileinfo.fname; #else fn = FilInfo.fname; #endif /* It is a file. */ p=strstr(fn,"bin"); if(p!=NULL) { File_Name=fn; break; } } } return res; } /*------------------------------------------------------ 讀取指定目錄下所有的檔案 說明: f_readdir 按順序讀取目錄內檔案, 重複呼叫此函式可讀取目錄內所有檔案; ---------------------------------------------------------*/ void FatReadDirTest(s8 *path) { // FRESULT res; /* FatFs 函式通用結果程式碼 */ #if _USE_LFN//如果使能支援長檔名 先對下面兩項初始化 fileinfo.lfsize=_MAX_LFN * 2 + 1;// fileinfo.lfname=(TCHAR*)FileName;// #endif if(f_opendir(&DirInfo,(const XCHAR*)path) == FR_OK)/* 開啟資料夾目錄成功,目錄資訊已經在dir結構體中儲存 */ { while(f_readdir(&DirInfo, &FilInfo) == FR_OK) /* 讀檔案資訊到檔案狀態結構體中 */ { if(!FilInfo.fname[0]) break; /* 如果檔名為‘\0',說明讀取完成結束 */ printf("%s/",path);//列印路徑 #if _USE_LFN printf("檔名:%s\r\n",fileinfo.lfname );//列印資訊到串列埠 #else printf("檔名:%s\r\n", FilInfo.fname);// #endif } } }