【无标题】关于FATFS遍历文件/文件夹可控制遍历深度的方法

FATFS遍历文件/文件夹可控制遍历深度的方法


/**********************************************************************************************

  • function: vPrintf_Dir
  • param : *pFolder: 文件夹路径
    * nMaxDepth: 最大目录深度
  • return : SysStatus_e
  • Explain : 打印文件夹
    **********************************************************************************************/
    #ifdef Used_Debug
    static void vPrintf_Dir(TCHAR *pFolder, uint8_t nDepth)
    {
    for(int i=0; i<7*nDepth; i++){
    printf(" “);
    }
    printf(”|—<< %s >>\n", pFolder);
    }
    #endif

/**********************************************************************************************

  • function: vPrintf_FileName
  • param : *pFileName: 文件名
    *nDepth: 目录深度
  • return : SysStatus_e
  • Explain : 打印文件名
    **********************************************************************************************/
    #ifdef Used_Debug
    static void vPrintf_FileName(TCHAR *pFileName, uint8_t nDepth)
    {
    for(int i=0; i<7*nDepth; i++){
    printf(" “);
    }
    printf(”|***( %s )\n", pFileName);
    }
    #endif

/**********************************************************************************************

  • function: ePrintf_DirStruct

  • param : *Path: 目录路径
    *nMaxDepth: 最大目录深度

  • return : SysStatus_e

  • Explain : 打印目录结构
    **********************************************************************************************/
    #ifdef Used_Debug
    static uint8_t g_nDepthCnt = 0;
    static SysStatus_e ePrintf_DirStruct(TCHAR *Path, uint8_t nMaxDepth)
    {
    DIR tDir;
    FRESULT res = f_opendir(&tDir, Path);
    SysStatus_e eStatus = eSys_OK;

    if(res == FR_OK){
    vPrintf_Dir(Path, g_nDepthCnt);
    g_nDepthCnt++;
    do{
    res = f_readdir(&tDir, &g_tFileManage.tFileINFO);
    if(res == FR_OK){
    if(g_tFileManage.tFileINFO.fname[0]){
    if((g_tFileManage.tFileINFO.fattrib & AM_DIR) == 0){
    /* 目标为文件,打印文件名 /
    vPrintf_FileName(g_tFileManage.tFileINFO.fname, g_nDepthCnt);
    }else{
    /
    目标为文件夹,打印文件夹名称,并执行递归 /
    if(g_nDepthCnt < nMaxDepth){
    /
    在寻址深度内,进行递归 */
    eStatus = ePrintf_DirStruct(g_tFileManage.tFileINFO.fname, nMaxDepth);
    if(eStatus != eSys_OK){
    break;
    }
    }
    }
    }else{
    break;
    }
    }else{
    vDebug_Printf(“f_readdir defeat, res=%d\n”, res);
    }
    }while(res == FR_OK);
    if(res == FR_OK && eStatus == eSys_OK && g_nDepthCnt > 0){
    g_nDepthCnt–;
    }
    f_closedir(&tDir);
    }else{
    vDebug_Printf(“f_opendir defeat, res=%d\n”, res);
    }
    return eStatus;
    }
    #endif

/**********************************************************************************************

  • function: eFileManage_CreatDir
  • param : *RootPath: 根路径
    *nMaxDepth: 最大目录深度
  • return : SysStatus_e
  • Explain : 打印目录结构
    **********************************************************************************************/
    static SysStatus_e ePrintf_DirectoryStruct(TCHAR *RootPath, uint8_t nMaxDepth)
    {
    SysStatus_e eStatus = eSys_OK;
    #ifdef Used_Debug
    g_nDepthCnt = 0;
    eStatus = ePrintf_DirStruct(RootPath, nMaxDepth);
    #endif
    return eStatus;
    }

结果如下:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值