fatfs递归输出路径和文件名 递归删除文件和目录

递归输出目录和文件名函数

FRESULT scan_files(char *path)
{
FRESULT res; //定义结果对象
DIR dir; //定义目录对象
UINT i; //定义变量
static FILINFO fno; //定义静态文件信息结构对象
//TCHAR Filepath[128] ={0};
 char* Filepath=(char*) mymalloc(SRAMEX,128);

TCHAR *DirPath;
res = f_opendir(&dir,path); //打开目录,返回状态 和 目录对象的指针

if(res == FR_OK)   //打开成功
{
	for(;;) //遍历
	{
		res = f_readdir(&dir, &fno); //读取目录,返回状态 和 文件信息的指针
		
		if(res != FR_OK || fno.fname[0] == 0 )
		{
			//printf("f_readdir end!\r\n");	
			myfree(SRAMEX,Filepath);
			break;        //若打开失败 或 到结尾,则退出
		}
		if((fno.fname[0] =='S'&&fno.fname[7] =='V'))
		{
		continue;
		}
		if(fno.fattrib & AM_DIR) //是目录
		{
			
			
			i = strlen(path); //获取原目录长度
			//printf(" path:%s,i=%d,File:%s\r\n",path,i,fno.fname);
			strcpy(Filepath,path);
			if(strcmp("0:/",path)!=0)  // 区别根目录
			DirPath = strcat(Filepath,"/");
			DirPath = strcat(Filepath,fno.fname);
			//printf(" DirPath:%s\r\n",DirPath);
			
			res = scan_files(DirPath); //将新目录进行递归调用

			if(res != FR_OK) 
				break; //打开失败则退出
			path[i] = 0;
			memset(Filepath,0,128);
		}
		else
		{
			if(strcmp("0:/",path)==0)
			{//printf(" File:%s%s\r\n",path,fno.fname);
			} //是文件
			else
			{ //printf(" File:%s/%s\r\n",path,fno.fname); //是文件
	      sprintf(Filepath,"%s/%s",path,fno.fname);			
			  download_file(Filepath,fno.fsize);
			}
		}
	}
}
else
{
	//printf(" f_opendir fail! res:%d",res); //打开失败
}
f_closedir(&dir); //关闭目录

//printf("f_closedir end!\r\n");

return res; //返回状态

}

递归删除目录和文件名函数

FRESULT del_fatfs_dir(const TCHAR *path)
{
    FRESULT res;
	  DIR dir;
    FILINFO fno;
    TCHAR file[_MAX_LFN + 2] = {0};
    res = f_opendir(&dir, path);
		if(res != FR_OK) printf("f_opendir failed  %d\r\n",res);
		else{ 
						while(1)
					{  
						if(f_readdir(&dir, &fno)!=FR_OK) printf("f_readdir failed  %d\r\n",res);
						else{	  
									if(0 == strlen(fno.fname)){break;} //若读到的文件名为空 printf(" f_readdir kong");  
									if(0 == strcmp(fno.fname, ".")){continue;}   //若读到的文件名为当前文件夹  printf(" f_readdir .");  
									if(0 == strcmp(fno.fname, "..")){continue;}  //若读到的文件名为上一级文件夹printf(" f_readdir .."); 		 
									memset(file, 0, sizeof(file));
									sprintf((char*)file, "%s/%s", path, fno.fname);
									if (fno.fattrib & AM_DIR){
										del_fatfs_dir(file);    //若是目录,递归删除
									}else{
										res = f_unlink(file);    //若是文件,直接删除			
									}
						    }
					}
				
	     } 
	    res = f_closedir(&dir);
     if(res == FR_OK){
			res = f_unlink(path);      //删除本身
		 }
   return res;
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值