f_unlink删除非空文件夹

f_unlink删除非空文件夹

f_unlink删除非空文件夹时需要遍历删除文件夹下每一个文件,这是我在网上找到的代码调试有点问题稍作修改后的版本,亲测可实现此既定功能,特做个记录。

FRESULT FS_DeleteIntFile(INT8S* path)
{
    UINT i, j;
    FRESULT res;
    DIR dir;
    FILINFO fno;
    INT8S* path1;

#if _USE_LFN
    fno.lfname = 0; /* Set null pointer because LFN is not needed */
#endif
    res = f_opendir(&dir, path);
    if (res == FR_OK)
    {
        for (i = 0; path[i]; i++)
        {
          path1[i]=path[i];
        } 
        path1[i++] = '/';
        for (;;)
        {
            res = f_readdir(&dir, &fno);
            if (res != FR_OK || !fno.fname[0]) break;
            if (fno.fname[0] == '.') continue;
            j = 0;
            do
            path1[i+j] = fno.fname[j];
            while (fno.fname[j++]);
            if (fno.fattrib & AM_DIR)
            {
                res = FS_DeleteIntFile(path1);
                if (res != FR_OK) break;
            }
            res = f_unlink(path1);

            if ((res != FR_OK) && (res != FR_DENIED)) break;
        }
        path1[--i] = '\0';
    }## 标题
    return res;
}

/* 删除文件夹或文件 */
FRESULT FS_DeleteFolderOrFile(INT8S* path)
{
    FRESULT res;

    /* 删除此文件夹下的所有文件 */
    res = FS_DeleteIntFile(path);

    if (res == FR_OK)
    {
        /* 删除此文件夹 */
        res = f_unlink(path);
    }
    else if (FR_NO_PATH == res)
    {
        /* 删除此文件 */
        res = f_unlink(path);
    }
   
    return res;
}

你可能感兴趣的:(stm32应用开发,笔记)