1. 程式人生 > >STM32Fatfs遍歷檔案的兩種方法

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         }     } }