【lesson11】客户端backUp类的实现
文章目录
- 成员变量
- 成员函数
- backUp
- getFileIdentifier
- isNeedUpload
- upLoad
- RunMoudle
成员变量
private:std::string _back_dir;//备份文件夹路径名dataManager* _data;//dataManager指针对象
成员函数
backUp
backUp(const std::string& back_dir, const std::string& back_file):_back_dir(back_dir)
{_data = new dataManager(back_file);//创建dataManager对象指针fileUtil fu(_back_dir);//如果没有_back_dir文件夹就创建它if (fu.exists() == false)fu.createDirectory();
}
getFileIdentifier
//传入文件名就可以得到getFileIdentifier返回的唯一标识
std::string getFileIdentifier(const std::string& filePath)
{fileUtil fu(filePath);if(fu.exists() == false){ std::cout << "getFileIdentifier fail not exists" << std::endl;return "";}//自己设计的唯一标识std::stringstream s;s << fu.fileName() << "-";s << std::to_string(fu.fileSize()) << "-";s << std::to_string(fu.lastModifyTime());return s.str();
}
isNeedUpload
//判断文件是否需要备份上传
bool isNeedUpload(const std::string& filePath)
{//1.获取哈希表中文件之前的唯一标识std::string old_id;bool ret = _data->getUniqueIdentifierByFilePath(filePath , &old_id);if (ret != false){//2.获取现在的唯一标识std::string new_id = getFileIdentifier(filePath);//3.判断两者是否相同,相同者表明不需要备份上传,否则就需要if (new_id == old_id)return false;}//如果文件超过设置的时间内都没有变化,则需要上传,否则不需要fileUtil fu(filePath);if (time(nullptr) - fu.lastModifyTime() <= 3){return false;}return true;
}
upLoad
bool upLoad(const std::string& filePath)
{//1.获取数据std::string body;fileUtil fu(filePath);fu.getContent(&body);//2.搭建客户端, 并发送请求httplib::Client client(SERVER_IP, SERVER_PORT);//2.1构建上传请求内容httplib::MultipartFormData item;item.name = "file";item.filename = fu.fileName();item.content = body;item.content_type = "application/octet-stream";httplib::MultipartFormDataItems items;items.push_back(item);//2.2发送请求auto ret = client.Post("/upload", items);if (!ret && ret->status != 200){return false;}return true;
}
RunMoudle
bool RunMoudle()
{while (true){//1.获取文件夹所有文件的信息fileUtil fu(_back_dir);std::vector<std::string> arry;fu.getDirectory(&arry);//2..遍历所有文件for (auto& e : arry){/*_data->insert(e, id);*///2.1判断是否需要上传,是:继续往下走,否:继续遍历下一个文件if (isNeedUpload(e) == false){continue;}std::string id = getFileIdentifier(e);if (id.empty())continue;//3.上传成功则修改备份信息if (upLoad(e) == true){_data->insert(e, id);}}Sleep(1);}
}
相关文章:
【lesson11】客户端backUp类的实现
文章目录 成员变量成员函数backUpgetFileIdentifierisNeedUploadupLoadRunMoudle 成员变量 private:std::string _back_dir;//备份文件夹路径名dataManager* _data;//dataManager指针对象成员函数 backUp backUp(const std::string& back_dir, const std::string& b…...
数据结构--关键路径
事件v1-表示整个工程开始(源点:入度为0的顶点) 事件v9-表示整个工程结束(汇点:出度为0的顶点) 关键路径:路径长度最长的路径 求解关键路径问题(AOE网) 定义四个描述量 …...
SSTI注入漏洞
SSTI注入漏洞 1.SSTI注入概述2.SSTI检测工具3.SSTI利用方法Java基本FreeMarker (Java)ThymeleafSpring Framework (Java)Spring视图操作(Java)Smarty (PHP)Twig (PHP)Jade (NodeJS)NUNJUCKS (NodeJS)ERB (Ruby)Jinja2 (Python)Mako (Python)ASP 1.SSTI注…...
Day11 - Day15
Day11 - Day15 Day11(1998年Text1) Perhaps it is humankind’s long suffering at the mercy of flood and drought that makes the idea of forcing the waters to do our bidding so fascinating. 也许正是人类长期在洪水和干旱支配下所遭受的苦难&a…...
启航信息学奥林匹克:青少年NOI学习路线与策略指南
在全球范围内,信息学奥林匹克竞赛(NOI)不仅是青少年展示编程和算法能力的舞台,更是未来计算机科学家和工程师的摇篮。本文将为志在参加NOI的青少年们提供一条清晰的学习路线和实用的建议,帮助你们在这条充满挑战与机遇…...
易舟云财务软件:数字化时代的财务管家
在数字化浪潮的推动下,财务软件成为了企业提升财务管理效率、实现数字化转型的关键工具。易舟云财务软件,正是这样一款深受企业喜爱的财务管理系统。本文将带你详细了解易舟云财务软件的特点、版本区别以及如何使用它来优化财务工作。 易舟云财务软件的特…...
catia零件装配中通过指南针移动零件
1 将零件导入进来后 2 把指南针移动到零件上 具体移动哪个可以通过模型树点击选中,选中那个就可以移动那个。 这种情况需要注意的是 需要双击选择要移动零件的父节点 如下图,Product2蓝色表示是激活的,这样才可以单击选中下面的零件后通过…...
如何使用免费的 Instant Data Scraper快速抓取网页数据
Instant Data Scraper 是一款非常简单易用的网页数据爬虫工具,你不需要任何代码知识,只需要点几下鼠标,就可以把你想要的数据下载到表格里面。以下是详细的使用步骤: 第一步:安装 Instant Data Scraper 打开谷歌浏览…...
【仿真建模-anylogic】事件之手动定时触发
Author:赵志乾 Date:2024-06-11 Declaration:All Right Reserved!!! 问题:建模过程中经常遇到需要临时规划特定逻辑执行时机的场景; 解决方案:在Event的User Control模…...
ElasticSearch学习笔记之三:Logstash数据分析
第3章 Logstash数据分析 Logstash使用管道方式进行日志的搜集处理和输出。有点类似*NIX系统的管道命令 xxx | ccc | ddd,xxx执行完了会执行ccc,然后执行ddd。 在logstash中,包括了三个阶段: 输入input --> 处理filter(不是必须…...
求职力扣刷题DAY20--二叉树 part06
20 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 n…...
Error:Kotlin: Module was compiled with an incompatible version of Kotlin.
一、问题:运行spring boot项目时,idea报出错误:时提示报错如下图: 错误代码: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected …...
关于flutter 启动 页面加载空白(三四秒空白页面)
一:可以在 对应的xml配置启动动画 <item><bitmapandroid:gravity"center"android:src"mipmap/ic_launcher" /></item> 二:以下是对应的文件目录 注意事项:俩处xml都配置一下,配置一样就可以了...
计量校准证书和检定证书区别,企业仪器校准要哪种证书好?
很多企业做校准,会要求校准机构出具相关证书,而有时候也会被机构询问,是要做检定还是校准,出具的证书是要校准证书还是检定证书?那么两者有什么区别呢? 1-检测方式不同 首先两种证书是不同检测方式所给的证…...
解析Java中1000个常用类:StackWalker类,你学会了吗?
推荐一个我自己写的小报童专栏导航网站: http://xbt100.top 收录了生财有术项目精选、AI海外赚钱、纯银的产品分析等专栏,陆续会收录更多的专栏,欢迎体验~复制URL可直达。 以下是正文。 Java 9 引入了许多新特性,其中之一是 StackWalker 类。StackWalker 提供了一种高效…...
【代码随想录算法训练Day32】LeetCode 122 买卖股票的最佳时机 II、LeetCode 55.跳跃游戏、LeetCode 45.跳跃游戏II
Day32 贪心第二天 LeetCode 122 买卖股票的最佳时机 II 思路真是无比巧妙,把区间利润拆成每天的利润,其实就是算出每天的利润,然后只取其中的正值即可。 在代码中计算是否计算加时还与0取最大值,相当于大于0才加入。 class Sol…...
Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)
效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(...
2024年,计算机相关专业还值得选择吗?
2024年,计算机相关专业还值得选择吗? 随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去很长一段时间里…...
流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换
pyflink 处理 kafka数据 1 DataStream API 示例代码 从非空集合中读取数据,并将结果写入本地文件系统。 from pyflink.common.serialization import Encoder from pyflink.common.typeinfo import Types from pyflink.datastream import StreamExecutionEnviron…...
Java进阶_多态特性
生活中的多态 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 现实中,比如我们按下 F1 键这个动作,同一个事件发生在不同的对象上会产生不同的结果。…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
