冗余文件清除工具

这是一个用于清除冗余文件的工具,它通过计算文件的MD5值来识别并删除相同内容的文件。文件管理器模块是核心,使用了关联式容器存储文件名与MD5值的关系,并提供了搜索和删除功能。此外,还支持模糊字符串匹配的文件删除。
摘要由CSDN通过智能技术生成

概述

名称:冗余文件清除工具
功能:删除指定路径下的所有拷贝文件,删除指定文件的拷贝文件,删除模糊字符串匹配的所有文件的拷贝文件
原理:通过读取文件的内容从而计算出该文件的MD5值(MD5值可以通过文件内容来唯一标识文件(相同内容的文件的MD5值相同,内容任何有一点不同的文件的MD5值会截然不同)),将其文件名与MD5的对应关系存放在多个不同的关联式容器内,从而找出相同内容的文件(拷贝文件),进行文件操作。

设计模块关系
在这里插入图片描述

设计思路框图
在这里插入图片描述

重点模块

file_manager
承上启下的模块,通过project_MD5模块中的一系列计算,将制定的文件的MD5值输出,然后通过file_tool模块中的删除文件和扫描文件的接口来辅助操作。
file_manager的重点是主要利用三个关联式容器的成员:std::unordered_setstd::string _files_list(存放所有的文件名)、std::unordered_map<std::string, std::string> _fileTomd5(存放file->MD5值)、std::unordered_multimap<std::string, std::string> _md5Tofile(存放MD5值->file)。
在这个模块里的主要功能就是搜盘和删除。值得注意的是:在搜盘和删除的时候,在有相关处理这三个容器的时候,一定要同步操作,同步增删。
模糊匹配删除:输入的部分字符串, 用string的find函数,注意:这里的find不是去找string数组,而是找一个string中是否find到(包含)了输入的部分字符串。

源码

APP—file_manager.h

#pragma once
#include"file_manager.h"

class file_app
{
   
public:
	//展示菜单
	void menu_show();
	//菜单
	void menu();
	//扫描文件
	void scanner();
	//按照名字删除
	void delete_by_name();
	//删除模糊匹配文件名的文件
	void delete_by_match_name();
	//删除所有的副本
	void delete_all_copy();
	//展示所有副本
	void show_all_copy();
	//展示所有文件
	void show_all_files();
private:
	FileManager _fm;
};

APP—file_manager.cpp

#pragma once
#include<iostream>
#include"APP—file_manager.h"
//扫描文件
void file_app::scanner()
{
   
	std::string path;
	std::cout << "请输入文件夹目录:" << std::endl;
	std::getline(std::cin, path);
	_fm.scan_dir(path);
}
//按照名字删除
void file_app::delete_by_name()
{
   
	std::string name;
	std::cout << "请输入文件名称(带路径):" << std::endl;
	std::getline(std::cin, name);
	_fm.delete_by_name(name);
}
//删除模糊文件名的文件
void file_app::delete_by_match_name()
{
   
	std::string name;
	std::cout << "请输入文件的部分字符串:" << std::endl;
	std::getline(std::cin, name);
	_fm.delete_by_match_name(name);
}
//删除所有的副本
void file_app::delete_all_copy()
{
   
	_fm.delete_all_copy();
}
//展示所有副本
void file_app::show_all_copy()
{
   
	_fm.showCopylist();
}
//展示所有文件
void file_app::show_all_files()
{
   
	_fm.showAllfile();
}

//展示菜单
void file_app::menu_show()
{
   
	std::cout << "---------------------------磁盘文件管理工具--------------------------" << std::endl;
	std::cout << "|  0、exit    1、scan   2、delete by name   3、delete by match name |" << std::endl;
	std::cout << "|  4、delete all copy      5、show all copy      6、show all files  |" << std::endl;
	std::cout << "---------------------------------------------------------------------" << std::endl;
	std::cout << "--------------------------------请选择-------------------------------" << std::endl;
}
//菜单
void file_app::menu()
{
   
	int input;
	do
	{
   
		menu_show();
		std::cin >> input;
		std::string garbage;
		getline(std::cin, garbage);
		switch (input)
		{
   
		case 1:
			scanner();
			break;
		case 2:
			delete_by_name();
			break;
		case 3:
			delete_by_match_name();
			break;
		case 4:
			delete_all_copy();
			break;
		case 5:show_all_copy();
			break;
		case 6:show_all_files();
			break;
		default:
			break;
		}
	} while (input);
}

file_manager.h

#pragma once
#include<string>
#include<unordered_map>
#include<unordered_set>
#include"project_MD5.h"

class FileManager
{
   
public:
	//扫描输入路径下的文件
	void scan_dir(const std::string& path);
	//将文件与MD5存入多个关联式容器
	void get_MD5_to_file();
	//得到拷贝的文件列表
	void get_copy_list();
	//通过文件名删除文件
	void delete_by_name(const std::string& filename);
	//通过MD5值删除文件
	void delete_by_MD5(const std::string& MD5num);
	void delete_by_MD5_lv2(const std::string& MD5num);
	//删除所有拷贝的文件
	void delete_all_copy();
	//删除模糊匹配文件名的文件
	void delete_by_match_name(const std::string& filename);

	void showCopylist();
	void showAllfile();
private:
	std::unordered_set<std::string> _files_list;
	//存放file->MD5值
	std::unordered_map<std::string, std::string> _fileTomd5;
	//存放MD5值->file
	std::unordered_multimap<std::string, std::string> _md5Tofile;
	MD5 _md5;
};

file_manager.cpp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值