QT-监测文件内容重复工具)
QT-监测文件内容重复工具
- 一、演示效果
- 二、核心代码
- 三、下载链接
一、演示效果
二、核心代码
#include "widget.h"
#include "ui_widget.h"
#include <QDir>
#include <QFile>
#include <QCryptographicHash>
#include <QApplication>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
#include <QCloseEvent>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);thread.start();md5.moveToThread(&thread);//跨線程傳遞自定義類型/模板時,要使用下列方法先注冊,否則會報錯qRegisterMetaType<QHash<QByteArray,QStringList>>("QHash<QByteArray,QStringList>");/** 按下按鈕->發送&Widget::checkDumplate( 信號 )* &Widget::checkDumplate( 信號 )與&FileMd5::checkDumplate( 槽 )相連接* &FileMd5::checkDumplate( 槽 )發送 &FileMd5::gotDumplate( 信號 )* &FileMd5::gotDumplate( 信號 )與&Widget::onGotDumplate( 槽 )相連接* 最後:&Widget::onGotDumplate( 槽 )將重複文件的hash添加到listWidget中*/connect(this,&Widget::checkDumplate,&md5,&FileMd5::checkDumplate);connect(&md5,&FileMd5::gotDumplate,this,&Widget::onGotDumplate);connect(&md5,&FileMd5::process,this,&Widget::onProcess);}Widget::~Widget()
{//關閉線程thread.exit();thread.wait();delete ui;
}void Widget::closeEvent(QCloseEvent *event)
{if(!isDone){QMessageBox::warning(this,"警告","文件加載中,請物關閉窗口");//忽略這個事件,當前窗口不會關閉event->ignore();}else{//接收這個事件,當前窗口會關閉event->accept();}}void Widget::on_pushButton_clicked()
{ui->progressBar->setValue(0);ui->listWidget->clear();//判斷是否有文件正在加載if(!isDone){QMessageBox::warning(this,"警告","年輕人別太心急,我跑不動了");return;}isDone = false;//選擇目錄QString path = QFileDialog::getExistingDirectory(this,"Choose Dir",".");ui->lineEdit->setText(path);emit checkDumplate(path);
}void Widget::onGotDumplate(const QHash<QByteArray, QStringList> &dumplates)
{this->dumplates = dumplates;for(QHash<QByteArray,QStringList>::const_iterator it = dumplates.begin(); it != dumplates.end(); it++){if(it.value().count()>1){ui->listWidget->addItem(it.key());}}if(ui->listWidget->count()==0){ui->listWidget->addItem("沒有重複的文件");}}void Widget::onProcess(int current, int total)
{ui->progressBar->setValue(current);ui->progressBar->setMaximum(total);if(current == total){isDone = true;}
}void Widget::on_listWidget_currentTextChanged(const QString ¤tText)
{ui->listWidget_2->clear();QStringList fileList = this->dumplates[currentText.toLocal8Bit()];ui->listWidget_2->addItems(fileList);
}
#include "FileMd5.h"
#include <QFileInfo>
#include <QDir>
#include <QCryptographicHash>
#include <QApplication>
#include <QDebug>FileMd5::FileMd5(QObject *parent) : QObject(parent)
{}void FileMd5::checkDumplate(const QString &path)
{//寫代碼檢測文件重複QHash<QByteArray,QStringList> ret;QStringList files = getFiles(path);for(int i = 0; i < files.count(); i++){QString fileName = files.at(i);QByteArray md5 = getFileMd5(fileName);ret[md5].append(fileName);emit process(i+1,files.count());}emit gotDumplate(ret);
}QStringList FileMd5::getFiles(const QString &path)
{QStringList ret;QDir dir(path);//.表示當前目錄,..表示上一級目錄//entryInfoList:返回目錄中所有文件和目錄的QFileInfo對象列表QFileInfoList infoList = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);for(int i=0; i < infoList.count(); i++){QFileInfo info = infoList.at(i);if(info.isDir()){QString subDir = info.absoluteFilePath();QStringList files = getFiles(subDir);ret.append(files);}else{QString fileName = info.absoluteFilePath();ret.append(fileName);}}return ret;
}QByteArray FileMd5::getFileMd5(const QString &fileName)
{QFile file(fileName);if(!file.open(QIODevice::ReadOnly)){return QByteArray();}QCryptographicHash hash(QCryptographicHash::Md5);while(!file.atEnd()){QByteArray content = file.read(100 * 1024 * 1024); //一次讀取100MB的內容hash.addData(content); //將content的數據添加到密碼散列qApp->processEvents(); //防止整個程序卡住(作用不大)}QByteArray md5 = hash.result().toHex(); //獲取最終的哈希值file.close();return md5;
}
三、下载链接
https://download.csdn.net/download/u013083044/89654075
相关文章:
![](https://i-blog.csdnimg.cn/direct/afbce2e738054627916b642f345b87b1.png)
QT-监测文件内容重复工具)
QT-监测文件内容重复工具 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "widget.h" #include "ui_widget.h" #include <QDir> #include <QFile> #include <QCryptographicHash> #include <QApplicatio…...
![](https://img-blog.csdnimg.cn/0b9679bfc9b4468db6f8f8987eae7b0d.png)
振兴杯全国青年职业技能大赛信息通信网络线务员解决方案
一、引言 随着数字化时代的到来,信息技术的飞速发展正深刻改变着人们的生活与工作方式。智能楼宇作为这一时代的产物,以其提升生活和工作效率、改善居住和办公环境的特点,受到了广泛关注。智能安防作为智能楼宇的重要组成部分,其…...
![](https://www.ngui.cc/images/no-images.jpg)
Ai音频文件转文字工具 会议音频转文字 录音转文字提取工具 下载
工具基于Ai模型,进行语音音频转文字,进行文字提取,功能强大好用,识别准确率还不错 运行速度取决于音频文件的时长及电脑的性能,音频越长则需要的时间越长,耐心等待即可 使用视频示例如下: Ai语…...
![](https://www.ngui.cc/images/no-images.jpg)
深入理解Spring Boot日志框架与配置
目录 Spring Boot日志框架概述Spring Boot默认日志框架:Logback日志配置文件日志级别的调整日志输出配置日志格式化日志轮转和归档集成其他日志框架日志管理工具最佳实践总结 Spring Boot日志框架概述 Spring Boot 支持多种日志框架,如 Logback、Log4…...
![](https://i-blog.csdnimg.cn/direct/26e3ffd0ce4c44c3839ae091b8bb8e82.gif)
WPF——动态排名图表实现
开发环境 VS2022 .NET 8.0 MVVM Toolkit 8.2.2 需求 开发中需要实现按照成绩动态指名,以展示当前的竞赛成绩的一个实时情况及变化。 即如下效果: 需求分析 按照接收到的信息,就是要将获取到的集合排序,并且要将排序前后的变…...
![](https://www.ngui.cc/images/no-images.jpg)
reactive() 的局限性
reactive() API 有一些局限性: 有限的值类型:它只能用于对象类型 (对象、数组和如 Map、Set 这样的集合类型)。它不能持有如 string、number 或 boolean 这样的原始类型。 不能替换整个对象:由于 Vue 的响应式跟踪是通过属性访问实现的&…...
![](https://i-blog.csdnimg.cn/direct/31f81ba01cd54751a1e80bcfa73d2136.jpeg)
stm32f407vet6驱动3.2寸lcd(9341 FSMC hal)
最近在钻研一些显示屏,研究到了lcd显示屏,然后入手了一块f407的开发板,但是店家给的资料有点怪,是keil4的工程,我一打开显示缺少f407vexxx,keil现在还巨慢,然后我到处找资料,发现网上大多是vgt6,又去各家ve…...
![](https://www.ngui.cc/images/no-images.jpg)
替换后的最长重复字符(LeetCode)
题目 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回 包含相同字母的最长子字符串的长度。 解题 def characterReplacement(s, k):count {}max_len…...
![](https://www.ngui.cc/images/no-images.jpg)
[sqlserver][sql]sqlserver查询表信息和字段信息
--查询一个表中的所有字段 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAMEzsyh_AccInfo --查询一个库下的所有表 select * from sysobjects where xtypeU --查询一个数据库下的所有字段 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME in(select nam…...
![](https://i-blog.csdnimg.cn/direct/bf74c21495bb4127bbca2fe7a1393809.png)
easypoi模板导出word并且合并行
导出流程 引入依赖制作模板合并导出 引入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.2</version> </dependency>制作模板 合并行是备注那一列,这一列…...
![](https://img-blog.csdnimg.cn/img_convert/f2de40223a48210978858367593d5858.png)
雨云美国二区E5v2服务器测评(非广告)
注:本文非广告,非推广 本文长期更新地址: 雨云美国二区E5v2服务器测评(非广告)-星零岁的博客https://blog.0xwl.com/13594.html 今天来测评一下雨云美国二区v2服务器。我测试的这台配置是4-8, 35 M上传&a…...
![](https://www.ngui.cc/images/no-images.jpg)
前端form表单post请求
前端请求post,以表单的形式,后端传来的str,就是url携带的参数 const form document.createElement(form); form.style.display none; form.setAttribute(target, _blank); form.setAttribute(method, post); form.setAttribute(action,url); var vars …...
![](https://i-blog.csdnimg.cn/direct/dcc7b1272a2148b696e9af047542449b.png)
oracle共享池(shared pool):一、工作原理、组成部分 二、软硬解析过程
文章目录 oracle整体结构图共享池(shared pool)shared pool的作用shared pool的组成查询 shared pool 各组成部分大小硬解析和软解析 oracle整体结构图 共享池(shared pool) shared pool的作用 1、 将 sql 语句解析成执行计划 …...
![](https://www.ngui.cc/images/no-images.jpg)
设计模式六大原则中的里氏替换原则
设计模式六大原则中的里氏替换原则(Liskov Substitution Principle, LSP)是面向对象设计中一个至关重要的原则,它定义了继承的基本原则和约束,确保子类能够透明地替换父类,而不会破坏系统的正确性和稳定性。以下是对里…...
![](https://i-blog.csdnimg.cn/direct/c1d28e3bf9c842f8bdc0a41d6290569b.png)
安装Cellpose
Cellpose是目前运用范围最广、效果最好的细胞分割模型,以下是安装方法。 3.1 安装cellpose 3.1.1 创建cellpose 打开Anaconda Navigator,如下图所示: 图3.1.1.1 Anaconda Navigator 依次点击 Environments、Create,在弹出的窗中࿰…...
![](https://img-blog.csdnimg.cn/318c638dfe04470c8e43a91fba2f5073.png)
图卷积神经网络算法
图神经网络 图卷积神经网络 GNN GCN 算法 咨询 图卷积神经网络(GCN) python D码,应用于节点分类。元学习,自监督学,transformer,lstm,cnn,bert,GAN,交通预测 …...
![](https://www.ngui.cc/images/no-images.jpg)
【C#】System.Text.Json
文章目录 主要特点使用场景基本用法序列化反序列化 自定义序列化与反序列化注意事项 System.Text.Json 是 .NET Core 3.0 及更高版本中引入的一个高性能的、低内存的 JSON 序列化与反序列化库。它是 .NET Core 和 .NET 5/6/7 等新版本中推荐的 JSON 处理方式,因为它…...
![](https://i-blog.csdnimg.cn/direct/effc29fa216b40c0a3e29243ebf296e5.png)
经典游戏,用java实现的坦克大战小游戏
今天给大家分享一个使用java编写的坦克大战小游戏,整体还是挺好玩的,通过对这款游戏的简单实现,加深对java基础的深刻理解。 一、设计思路 1.坦克大战小游戏通过java实现,其第一步需要先绘制每一关对应的地图,地图包括…...
![](https://www.ngui.cc/images/no-images.jpg)
linux开通端口命令
这块需要开通8088 8083 端口限制 查看已开放端口:sudo firewall-cmd --list-ports 开放8083端口:sudo firewall-cmd --add-port8088/tcp --permanent 开放8088端口:sudo firewall-cmd --add-port8083/tcp --permanent 移除端…...
![](https://img-blog.csdnimg.cn/img_convert/3e1b5e3c9078e8470242bdfc3d608de0.png)
5、并发锁机制之synchronized
并发锁机制之synchronized i/i--引起的线程安全问题分析原因分析i的JVM字节码指令i--的JVM 字节码指令结论 解决方案 synchronized的使用加锁方式使用synchronized解决之前的共享问题方式一方式二 synchronized底层实现原理分析查看synchronized的字节码指令序列重量级锁实现之…...
![](https://www.ngui.cc/images/no-images.jpg)
职场那些事:应对施暴者的智慧
在职场中,有些人用各种手段让你感到难受,让你屈服,甚至适应他们的变态心理。面对这种人,最重要的就是保持低调。🤐 很多同事选择倾诉,然而这其实是个大错特错。正如鲁迅所说,“同事间的悲欢并不…...
![](https://img-blog.csdnimg.cn/direct/0eed9aa32af4480691ccf310f5a6aa0a.png)
精细化管理和智慧化运营的智慧油站开源了。
AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用…...
![](https://i-blog.csdnimg.cn/direct/3355c8f744f44e45a31eb78317e98805.png)
vue项目配置基础路由vue-router
1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹,在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…...
![](https://i-blog.csdnimg.cn/direct/5165e7c5d3a64e7c8e40f852ca16a6d0.jpeg)
2024年入职/转行网络安全,该如何规划?_网络安全职业规划
前言 前段时间,知名机构麦可思研究院发布了 《2022年中国本科生就业报告》,其中详细列出近五年的本科绿牌专业,其中,信息安全位列第一。 网络安全前景 对于网络安全的发展与就业前景,想必无需我多言,作为…...
![](https://img-blog.csdnimg.cn/img_convert/a08571f736dc04b5bef51cd09e8e3a0a.gif#pic_center)
【Python系列】执行 Shell 命令的六种方法
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
![](https://www.ngui.cc/images/no-images.jpg)
2024华为OD机试真题-部门人力分配Python-C卷D卷-200分
【华为OD机试】-(C卷+D卷)-2024最新真题目录 目录 题目描述 输入描述 输出描述 用例1 考点 解题思路 代码 题目描述 部门在进行需求开发时需要进行人力安排。 当前部门需要完成 N 个需求,需求用 requirements 表述,requirements[i] 表示第 i 个需求的工作量大小,单…...
![](https://www.ngui.cc/images/no-images.jpg)
【Leetcode 1436 】旅行终点站—— 哈希表
给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。 题目数据保证线路图会形成一…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot自动配置原理-面试题
网络上看很多文章并没什么用,重点没说到,不知道从那里入手讲,刷到的直接按照下面这个,背出来就行了 1、当启动springboot应用程序的时候,会先创建SpringApplication的对象,在对象的构造方法中会进行某些参数…...
![](https://i-blog.csdnimg.cn/direct/fcdf2625006c43e1930579d0676bce39.png)
【C++题解】1140 - 亲密数对
欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1140 - 亲密数对 类型:自定义函数 题目描述: 键盘输入 N ,N 在 2 至 2000 之间,求 2 至 N 中的亲密数对,就是 A 的因子和…...
![](https://i-blog.csdnimg.cn/direct/f27b63837402461eb61f33fd93cb9a8d.png)
学习大数据DAY40 基于 hive 的数据处理
目录 Hive 复合数据定义方法 Hive 复合数据查询方法 hive 内置函数 上机练习 Hive 复合数据定义方法 Hive 复合数据查询方法 hive 内置函数 -- 查看系统自带的函数 show functions; -- 显示自带的函数的用法 desc function upper; -- 详细显示自带的函数的用法 desc …...
![](/images/no-images.jpg)
长春南京小学网站建设/常见的网站推广方式有哪些
10.1.2 建立方法 方法使用标准函数格式、可访问性和可选的static修饰符来声明。例如 class MyClass {public string GetString() {return "Here is a string.";} } 注意,如果使用了 static 关键字,这个方法就只能通过类来访问,不能…...
![](/images/no-images.jpg)
如何自己建立网站/公司如何在百度宣传
Dubbo自定义Filter统一处理异常参考文章: (1)Dubbo自定义Filter统一处理异常 (2)https://www.cnblogs.com/gossip/p/11734654.html 备忘一下。...
![](https://img-blog.csdnimg.cn/20181205185633491.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMzI4MQ==,size_16,color_FFFFFF,t_70)
做的网站怎样适配手机/广告联盟官网
知行软件已于 15~17 年成功助力星宇车灯对接 BMW、上汽大众、PLASTIC OMNIUM、广汽丰田及 VDL 等。2018 年知行与星宇再次合作,成功对接 BBA EDI 系统。 - EDI 需求概览 - - EDI 解决方案 - OFTP2.0 on Internet 支持 OFTP2.0 传输协议且通过 ODETTE 认证的 EDI 系…...
![](/images/no-images.jpg)
网站引进搜索引擎怎么做/运营推广渠道有哪些
你只需要知道有什么 库 然后阅读文档 写出自己的东西 不要模仿别人 转载于:https://www.cnblogs.com/Cheetos/p/5385847.html...
![](https://img-blog.csdnimg.cn/img_convert/ea9f38753b2b4ec2ac3fa22d04bf9e8a.png)
可以绑定独立域名网站/国色天香站长工具
导读:衡量领导者优秀与否的一个重要标准,是责任心。除了对工作整体的负责的心态之外,还有对下属的负责。一个优秀的领导者,总是能够在关键时刻挺身而出,为下属“遮风挡雨”。试想,为什么在军队里࿰…...
![](/images/no-images.jpg)
郑州做网站哪家便宜/安卓神级系统优化工具
问题 最近服务器上面出现如下安全问题: 允许Traceroute探测ICMP timestamp请求响应漏洞 解决 允许Traceroute探测 firewall-cmd --get-icmptypes firewall-cmd --add-icmp-blocktime-exceeded --permanentICMP timestamp请求响应漏洞 firewall-cmd --add-icmp…...