FatFs检测并建立多层目录并更改文件名
时间:2022-07-23
本文章向大家介绍FatFs检测并建立多层目录并更改文件名,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
FatFs检测文件路径是否存在,不存在就建立多层目录,最后更改文件名
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, ' ', 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] = ' ';
W_Dresult = f_opendir(&W_Ddir, RootPath); //检测文件夹
if(W_Dresult == FR_OK)
{
printf(">> 文件夹存在[%s]rn",RootPath);
break;
}
else
{
printf(">> 文件夹打开错误 - %d [%s]rn",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]rn", RootPath); }
else printf(">> 创建文件夹失败 - %d [%s]rn",W_Dresult, RootPath);
}
}
/****************************************************************************************/
W_Dresult = f_rename(recfilename,DownFileName); //更改临时的文件名
printf(">> 云端文件名:%srn",DownFileName);
if(W_Dresult == FR_OK) printf(">> 更改文件名成功 - %srn",DownFileName);
else printf(">> 更改文件名失败 - %drn",W_Dresult);
if(W_Dresult == FR_EXIST)
{
printf(">> 文件已存在,删除旧文件rn");
W_Dresult = f_unlink(DownFileName); //删除旧文件
if(W_Dresult == FR_OK)
{
W_Dresult = f_rename(recfilename,DownFileName); //更改临时的文件名
if(W_Dresult == FR_OK) printf(">> 再次更改文件名成功 - %srn",DownFileName);
else printf(">> 再次更改文件名失败 - %drn",W_Dresult);
}
else printf(">> 再次更改文件名失败 - %drn",W_Dresult);
}
return;
}
- 【深度学习】图片风格转换应用程序:使用CoreML创建Prisma
- 压力测试中存在的问题
- 这或许是对小白最友好的python入门了吧——18,用while循环处理列表
- 如何在js中将统计代码图标隐藏
- 警惕IT黑洞
- 这或许是对小白最友好的python入门了吧——17,while循环
- 泛型介绍(接上一篇,具体的事例随后呈上)
- PHP高级编程之守护进程
- 看到他我一下子就悟了-- 泛型(2)
- ExtJS4中设置tabpanel的tab高度问题
- Oracle写错误与文件离线
- 看到他我一下子就悟了-- 泛型(1)
- EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现
- [Java]读取文件方法大全
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- win10必备效率预览神器-Quick look
- 史上最全-Nginx和Tengine安装部署
- Jenkins+Ansible 实现自动化运维 DevOps
- FFmpeg 内容介绍 音视频解码和播放
- 开源:安卓手机app控制arduino,通过esp8266-01
- 聊聊dubbo-go的metricsFilter
- 程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则
- 用CSS实现各种特殊效果
- 二分查找算法
- 一分钟学Python| Python的运算符 (上)
- JS开发必须知道的41个技巧【持续更新】
- PermissionX重磅更新,支持自定义权限提醒对话框
- 给Swagger换了个新皮肤,瞬间高大上了!
- 学习 | egg.js 中间件和插件
- Django template层之json报文遍历总结