文件管理项目

前言

在我们磁盘中, 在不同目录下可能会存在很多相同文件副本,它分散在不同目录下, 如果想要它们删除掉这是一件很繁琐的事。

举个例子:C:\Users\Administrator\Desktop当前路径下存在test1.txt和test2.txt文件, 两个文件内容相同,如果不仔细查看不知道两个文件重复。1个重复、2、个重复、10个重复这样手动删除起来就很费劲。

今天写了一个项目, 采用MD5算法加文件操作接口实现, 可以很轻松的实现一个路径下所有重复文件删除!

技术栈

      1、MD5算法实现
      2、读取文件接口(_findfirst、_findnext等)

支持功能

      1、显示当前路径下所有文件信息 (有重复和无重复均显示)
      2、显示当前路径下所有具有重复文件 (文件没有重复不显示)
      3、支持使用MD5进行重复文件删除
      4、支持使用文件名, 删除该文件名所有重复文件
      5、支持删除路径下所有重复文件

ps: 以上所有删除最终会保留一个文件, 仅删除文件的重复副本

原理剖析

MD5算法
      1、MD5算法是一种数字签名、信息摘要算法, 当给任意长度的数据,他都会产生一个32位16进制(也就是16字节)的字符信息。如:6e5e12ee395274352e9d55c04ef192ae。
      2、我们将文件中内容采用MD5算法计算,最终会得到一个MD5值, 如果两个文件相同,则这个MD5值一样,否则MD5值不一样。
(因此采用MD5值确认文件重复副本)
      3、MD5算法实现:
            MD5算法每次运算的数据量是512位(也就是61字节)大小。给定一个块数据,我们将其划分为一块一块512位数据(数据量%512),最后一块(数据量/512)不管是否为多少都需要进行填充(即使数据量是512的整数倍,也需要填充, 填充仅对最后一块数据而言), 填充完毕之后数据量一定会为512位的整数倍。
接下来就会对这个一块一块512数据进行运算, 我们会事先初始化4个整型变量(int a,int b, int c, int d),四个处理函数F、H、I、G。每一个函数会对一块512数据处理一遍, 处理的时候a、b、c、d四个变量会根据一定规律发生变化,最终所有数据处理完毕之后,a、b、c、d四个变量合在一块就是MD5值(4个int变量=4*4=16字节)。

文件操作_findfirst接口大家可以借鉴别的大佬文章学习,后面的模块只是封装了这些接口, 采用的无序的map、无序set、无序multimap实现。 删除的依据是根据文件计算的MD5值。没有可讲的。

测试1:采用Md5值进行删除

文件管理项目

测试2:采用文件名值进行删除

文件管理项目

测试3: 删除所有重复文件

文件管理项目

测试4: 模糊删除(带有关键字重复文件删除)

文件管理项目
源码链接
MD5算法思想pdf我上传了,免费查看!!!

有兴趣的朋友可以玩玩!