【无标题】关于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
    评论
要删除SD卡中的文件夹,需要使用FATFS文件系统提供的相关函数。以下是一个简单的例子,可以让你了解如何在STM32上使用FATFS文件系统删除SD卡中的文件夹。 首先,你需要初始化FATFS文件系统,包括挂载SD卡、打开文件夹等操作。下面是一个初始化FATFS的示例代码: ```c FATFS fs; FRESULT res; DIR dir; res = f_mount(&fs, "", 1); if (res != FR_OK) { // 处理挂载失败的情况 } res = f_opendir(&dir, "/folder_name"); if (res != FR_OK) { // 处理打开文件夹失败的情况 } ``` 上面的代码中,`f_mount`函数用于挂载FATFS文件系统,`f_opendir`函数用于打开指定的文件夹。 接下来,你可以使用`f_readdir`函数遍历文件夹中的所有文件和子文件夹,然后使用`f_unlink`函数删除子文件夹和其中的文件。下面是一个示例代码: ```c FILINFO fileInfo; while (f_readdir(&dir, &fileInfo) == FR_OK && fileInfo.fname[0] != 0) { if (fileInfo.fattrib & AM_DIR) { // 如果是子文件夹,则递归删除 if (strcmp(fileInfo.fname, ".") != 0 && strcmp(fileInfo.fname, "..") != 0) { char path[64]; sprintf(path, "/folder_name/%s", fileInfo.fname); res = f_unlink(path); if (res != FR_OK) { // 处理删除失败的情况 } } } else { // 如果是文件,则直接删除 char path[64]; sprintf(path, "/folder_name/%s", fileInfo.fname); res = f_unlink(path); if (res != FR_OK) { // 处理删除失败的情况 } } } ``` 上面的代码中,`f_readdir`函数用于读取文件夹中的文件信息,`f_unlink`函数用于删除文件文件夹。在遍历文件夹时,需要忽略`.`和`..`两个特殊的文件夹。 最后,你可以使用`f_closedir`函数关闭文件夹,以释放相关资源: ```c f_closedir(&dir); ``` 这样,你就可以使用FATFS文件系统在STM32上删除SD卡中的文件夹了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值