前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FatFs检测并建立多层目录并更改文件名

FatFs检测并建立多层目录并更改文件名

作者头像
小锋学长生活大爆炸
发布2020-08-13 14:34:49
1.6K0
发布2020-08-13 14:34:49
举报

FatFs检测文件路径是否存在,不存在就建立多层目录,最后更改文件名

代码语言:javascript
复制
if(W_Dresult==FR_OK) 
{														
	wifi_dp_wav_file_status=0;
	start_downloading=0;

/*************************************遍历创建文件夹*************************************************************/
	u8 opendir_err = 0;   //错误提示
	char SonPath[10][50]; //最多10层,每层最多50字符
	char RootPath[200];   //最低已存在路径
	memset(SonPath, '\0', sizeof(SonPath)); //初始化
	memcpy(RootPath, DownFileName, sizeof(DownFileName));
	u8 num = 0;           // 剔除的次数
	do                      //遍历寻找文件夹
	{
		char *dot = strrchr(RootPath, '\\');   //剔除一层
		memcpy(SonPath[num], dot, &RootPath[strlen(RootPath)] - dot);  //保存子目录
		for(int i=0;i<dot-RootPath;i++) RootPath[dot-RootPath+i] = '\0';
		
		W_Dresult = f_opendir(&W_Ddir, RootPath); //检测文件夹
		if(W_Dresult == FR_OK)
		{
			printf(">> 文件夹存在[%s]\r\n",RootPath);
			break;
		}
		else
		{
			printf(">> 文件夹打开错误 - %d [%s]\r\n",W_Dresult, RootPath);
			if(W_Dresult == FR_NO_PATH)
			{
				opendir_err = 1;
				num ++;
				continue;
			}
		}
	}
	while(1);
	if(opendir_err == 1)
	{
		//遍历创建文件夹
		opendir_err = 0;
		for(int i=0;i<num;i++)
		{
			memcpy(&RootPath[strlen(RootPath)], SonPath[num-i], strlen(SonPath[num-i]));
			W_Dresult = f_mkdir(RootPath);
			if(W_Dresult == FR_OK) { printf(">> 创建文件夹成功[%s]\r\n", RootPath); }
			else printf(">> 创建文件夹失败 - %d [%s]\r\n",W_Dresult, RootPath);
	}
	}
/****************************************************************************************/		

	W_Dresult = f_rename(recfilename,DownFileName);  //更改临时的文件名
	printf(">> 云端文件名:%s\r\n",DownFileName);
	if(W_Dresult == FR_OK) printf(">> 更改文件名成功 - %s\r\n",DownFileName);
	else printf(">> 更改文件名失败 - %d\r\n",W_Dresult);
	if(W_Dresult == FR_EXIST)
	{
									printf(">> 文件已存在,删除旧文件\r\n");
		W_Dresult = f_unlink(DownFileName);  //删除旧文件
		if(W_Dresult == FR_OK) 
		{
			W_Dresult = f_rename(recfilename,DownFileName);  //更改临时的文件名
			if(W_Dresult == FR_OK) printf(">> 再次更改文件名成功 - %s\r\n",DownFileName);
			else printf(">> 再次更改文件名失败 - %d\r\n",W_Dresult);
		}
		else printf(">> 再次更改文件名失败 - %d\r\n",W_Dresult);
	}
	
	return;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档