FATFS文件管理系统,删除非空文件夹及其自身

FRESULT filedir_delete(u8 *path)//删除路径下每一个文件
{
	u8 flag=0;
	FRESULT res;  
    DIR   dir;     /* 文件夹对象 */ //36  bytes  
    FILINFO fno;   /* 文件属性 */   //32  bytes  
    TCHAR file[_MAX_LFN + 2] = {0};  
#if _USE_LFN  
    TCHAR lname[_MAX_LFN + 2] = {0};  
#endif  
      
#if _USE_LFN  
    fno.lfsize = _MAX_LFN;  
    fno.lfname = lname;    //必须赋初值  
#endif  
    //打开文件夹  
    res = f_opendir(&dir, (const TCHAR*)path);  
      
    //持续读取文件夹内容  
    while((res == FR_OK) && (FR_OK == f_readdir(&dir, &fno)))  
    {  
        //若是"."或".."文件夹,跳过  
        if(0 == strlen(fno.fname))          break;      //若读到的文件名为空  
        if(0 == strcmp(fno.fname, "."))     continue;   //若读到的文件名为当前文件夹  
        if(0 == strcmp(fno.fname, ".."))    continue;   //若读到的文件名为上一级文件夹  
          
        memset(file, 0, sizeof(file));  
#if _USE_LFN  
        sprintf((char*)file, "%s/%s", path, (*fno.lfname) ? fno.lfname : fno.fname);  
#else  
        sprintf((char*)file, "%s/%s", path, fno.fname);  
#endif  
		if(strcmp(path,"0:")==0)//目标是根目录
	     {
			flag=1;
		}
        if (fno.fattrib & AM_DIR)  
        {//若是文件夹,递归删除  
            res = filedir_delete(file);			
        }  
        else  
        {//若是文件,直接删除  
            res = f_unlink(file);  
        }  
    }        
    //删除本身  
    if(res == FR_OK)    
		{
			if(flag==1)
			{			
				return res; 
			}   
			else
			{
				res = f_unlink((const TCHAR*)path);
				return res;
			}
		}
}

https://blog.csdn.net/u011689162/article/details/54586885/

 参考的是上面这位大佬的程序,但是这个大佬的程序在删除根目录时,虽然可以实现目的但是,返回值会显示错误。错误信息为The path name format is invalid。所以在此基础上加了根目录的判断,经试验可以达到既定要求。特此记录。

PS:本人用的是SD_NAND,初始化后没有fat文件的格式,如果初始化后再格式化FAT格式会相对较麻烦所以才想用这种方式删除根目录下的全部文件。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值