VS清理器

界面

工程目录

列表控件ID改名IDC_FILELIST 绑定变量m_FileList

属性设置Accept Files 设置True

成员添加
// 用于保存待遍历的目录
vector<CString> m_DirVec;
// 保存待删除的文件
vector<CString> m_WaitVec;

// 保存可删除的文件个数
DWORD m_DelCount = ;
// 保存所有文件的个数
DWORD m_FileCount = ;

// 用于保存总文件的大小
ULONGLONG m_CountSize = ;
// 用于保存可删除的大小
ULONGLONG m_DelSize = ;
WM_DROPFILES响应拖拽控件信息
// 响应文件的拖拽消息
void CVSClearDlg::OnDropFiles(HDROP hDropInfo)
{
// 1. 获取到拖拽的所有文件和文件夹的的个数
int count = DragQueryFile(hDropInfo, -, nullptr, );

// 2. 通过获取到的文件个数进行循环获取文件名
for (int i = ; i < count; ++i)
{
// 2.1 申请空间用于保存文件的名称
WCHAR FileName[MAX_PATH] = { };

// 2.2 根据循环获取的下标获取文件的名称
DragQueryFile(hDropInfo, i, FileName, MAX_PATH);

// 2.3 判断当前的项是不是一个目录
if (GetFileAttributes(FileName) & FILE_ATTRIBUTE_DIRECTORY)
{
// 2.4 查看路径是否已经存在与容器中
if (m_DirVec.end() == find(m_DirVec.begin(), m_DirVec.end(), FileName))
{
// 2.5 添加到目录容器中,用于将来遍历
m_DirVec.push_back(FileName);

// 2.6 添加到列表中,用于进行显示
m_FileList.InsertItem(i, FileName);
}

}
}

CDialogEx::OnDropFiles(hDropInfo);
}

待删文件

按钮处理事件
// 这个按键用于获取所有可以删除的文件放置到待删除列表中
void CVSClearDlg::OnBnClickedButton3()
{
// 检查是否需有需要遍历的目录
if (m_FileList.GetItemCount() == )
{
MessageBox(L"没有更多可遍历的目录!");
return;
}

// 遍历路径容器,调用函数删除所有符合的文件
for (auto& Path : m_DirVec)
{
// 寻找需要删除的文件
FindFile(Path);
}

// 当前遍历了多少文件和可以删除多少
CString Msg;
Msg.Format(L"共有文件 %d 个,大小为 %.2lf MB\n可以删除 %d 个,大小为 %.2lf MB",
m_FileCount, m_CountSize / 1024.0 / 1024.0,
m_DelCount, m_DelSize / 1024.0 / 1024.0);
MessageBox(Msg);
}


// 遍历文件, 寻找需要删除的文件
VOID CVSClearDlg::FindFile(CString FilePath)
{
// 0. 定义需要的结构体
WIN32_FIND_DATA FindInfo = { };

// 1. 拼接需要寻找的字符串路径
HANDLE FindHandle = FindFirstFile(FilePath + L"\\*", &FindInfo);

// 2. 判断句柄是否获取成功
if (FindHandle != INVALID_HANDLE_VALUE)
{
// 3. 使用 do while 不断的获取所有的内容
do {
// 4. 如果是目录就继续遍历
if (FindInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// 4.1 过滤掉 . 和 .. 路径
if (CString(".") == FindInfo.cFileName || CString("..") == FindInfo.cFileName)
continue;

// 4.2 拼接出新的路径,继续递归遍历
FindFile(FilePath + L"\\" + FindInfo.cFileName);
}
// 5. 处理文件类型的项
else
{
// 文件的总数 +1,大小也增加
m_FileCount++;
m_CountSize += FindInfo.nFileSizeLow;

// 5.1 否则判断是否是需要删除的文件
if (- != m_FileExt.Find(PathFindExtension(FindInfo.cFileName)))
{
// 要删除的文件个数 + 1
m_DelCount++;
m_DelSize += FindInfo.nFileSizeLow;

// 拼接出全路径
CString FileName = FilePath + L"\\" + FindInfo.cFileName;

// 5.2 将符合条件的文件单独添加到容器中
m_WaitVec.push_back(FileName);

// 5.3 将文件路径添加到列表中
m_WaitList.InsertItem(, FileName);
}
}
} while (FindNextFile(FindHandle, &FindInfo));
}
}

删除按钮处理事件

// 删除遍历到的符合要求的文件
void CVSClearDlg::OnBnClickedButton1()
{
// 检查是否需要删除文件
if (m_WaitList.GetItemCount() == )
{
MessageBox(L"没有更多可删除的文件!");
return;
}

int FileCount = ;

// 遍历文件进行删除
for (auto& FilePath : m_WaitVec)
{
if (DeleteFile(FilePath))
{
// 递增文件和大小
FileCount++;

// 删除成功,添加到列表
m_DelList.InsertItem(, FilePath);
}
}

// 可以删除的个数和实际删除的个数
CString Msg;
Msg.Format(L"可删除文件 %d 个\n实际删除删除文件 %d 个", m_DelCount, FileCount);
MessageBox(Msg);
}
后缀名的更新按钮事件
// 更新可删除的文件后缀名
void CVSClearDlg::OnBnClickedButton2()
{
// 从控件获取信息到变量
UpdateData(TRUE);
}

知识点

后缀名的类型设置直接在构造函数中初始化了信息
CVSClearDlg::CVSClearDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_VSCLEAR_DIALOG, pParent)
{
m_FileExt = _T(".obj\\.tlog\\.lastbuildstate\\.idb\\.pdb\\.pch\\.res\\.ilk\\.exe\\.sdf\\.ipch\\.log\\.db\\.suo\\");
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
WM_DROPFILES响应拖拽控件信息

类向导-选择想要响应的类-命令-WM_DROFILES

解除管理员模式下的消息过滤
    ChangeWindowMessageFilterEx(m_hWnd, WM_DROPFILES, MSGFLT_ALLOW, NULL);
ChangeWindowMessageFilterEx(m_hWnd, 0x0049, MSGFLT_ALLOW, NULL);
根据循环获取的下标获取文件的名称

DragQueryFile(hDropInfo, i, FileName, MAX_PATH);

判断当前的项是不是一个目录

if (GetFileAttributes(FileName) & FILE_ATTRIBUTE_DIRECTORY)

遍历路径容器,调用函数删除所有符合的文件
for (auto& Path : m_DirVec)
{
// 寻找需要删除的文件
FindFile(Path);
}
CString里Format的用法
    CString Msg;
Msg.Format(L"共有文件 %d 个,大小为 %.2lf MB\n可以删除 %d 个,大小为 %.2lf MB",
m_FileCount, m_CountSize / 1024.0 / 1024.0,
m_DelCount, m_DelSize / 1024.0 / 1024.0);
MessageBox(Msg);
拼接需要寻找的字符串路径
// 0. 定义需要的结构体
WIN32_FIND_DATA FindInfo = { 0 };
HANDLE FindHandle = FindFirstFile(FilePath + L"\\*", &FindInfo);

#####

PathFindExtension()查找后缀名函数
//否则判断是否是需要删除的文件

if (-1 != m_FileExt.Find(PathFindExtension(FindInfo.cFileName)))

MFC_VS清理器的更多相关文章

  1. RAM清理器

    或许有些氨基小白不知道RAM是什么,官方的解释是"运行内存" 只要你的RAM够大,你玩什么都不卡! 今天给大家带来的就是 <RAM清理器>!!体积小,能量大就是我给他介 ...

  2. Python_练习_VS清理器

    #导入os import os #创建列表放入后缀 d=[ '.txt','obj','tlog','lastbuildstate','idb','pdb','pch','res','ilk','sd ...

  3. 著名清理软件(CCleaner) 5.24.5841 中文版

    软件名称: 著名清理软件(CCleaner) 软件语言: 多国语言 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 5.7MB 图片预览: 软件简介: CCleaner的体积小, ...

  4. CCleaner(著名清理软件) 5.21.5700 中文免费版(著名清理软件) 5.21.5700 中文免费版

    软件名称: CCleaner(著名清理软件) 5.21.5700 中文免费版著名清理软件(CCleaner)软件语言: 多国语言授权方式: 免费软件运行环境: Win 32位/64位软件大小: 5.6 ...

  5. Chapter5_初始化与清理_用构造器初始化

    接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题.初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾 ...

  6. Spark源码剖析 - SparkContext的初始化(八)_初始化管理器BlockManager

    8.初始化管理器BlockManager 无论是Spark的初始化阶段还是任务提交.执行阶段,始终离不开存储体系.Spark为了避免Hadoop读写磁盘的I/O操作成为性能瓶颈,优先将配置信息.计算结 ...

  7. 给 Linux 系统“减肥”,系统垃圾清理_系统安装与配置管理_Linux Today - Google Chrome

    给 Linux 系统"减肥",系统垃圾清理  2013/10/16  linux  系统安装与配置管理  评论  15,555 Linux 计算机安装后,在我们不断的使用过程中,因 ...

  8. CCleaner 垃圾文件清理规则 编写指南

    以下内容的英文版本来源于 CCleaner 官方论坛,仅供参考.欢迎大家编写并分享针对常用国产软件的垃圾文件清理规则!需要说明的是规则文件(Winapp2.ini)需和程序文件放于同一文件夹下,才能被 ...

  9. Windows 开发之VC++垃圾清理程序软件

    概述 本程序软件的主要实现垃圾文件清理的功能,即对指定的文件格式的临时文件或垃圾文件进行遍历.扫描.显示.删除清理等功能.在程序界面设计方面,对默认对话框重新自定义绘制,主要包括标题栏的重绘.对话框边 ...

随机推荐

  1. mysql 查看编码方式

    一. 查看数据库的字符集 show variables like 'character\_set\_%'; 输出: +--------------------------+--------+ | Va ...

  2. mongodb01--安装

    配置Mongo服务端 安装MongoDB 1.按照操作系统下载http://www.mongodb.org/downloads. 2.在D盘新建MongoDB文件夹(此文件夹为自定义的数据库安装目录D ...

  3. (续)linux SD卡初始化---mmc_sd_init_card函数

    mmc_sd_init_card剩下的关于UHS-I的分支结构. uhs-I的初始化流程图如图: 红线标出的部分是已经做了的事,与上一篇那个流程图是一致的,之后就是if分支中做的事. if分支中的函数 ...

  4. 我的vim 配置——nerdtree、ack vim、vim sneak

    set nu colorscheme darkblue syntax on " set term=xterm " 设置终端类型 set nonumber " 是否显示行号 ...

  5. mysql数据恢复失败记录

    今天遇到了MySQL有几个数据表空间丢失的问题,作为一个外行尝试好久没恢复成功,考虑到只是几个基础数据表,就删除数据表停止服务,删除ibd文件后再创新创建表解决了问题. 近期的一些事让我不像以前一样钻 ...

  6. VS2013在右键菜单添加命令插件开发

    一.选择Visual Studio Package模板建立插件项目 由于此功能需要在右键菜单上添加命令,所以选择Visual Studio Package模板,根据模板向导步骤插件项目,在Select ...

  7. body和html

    1 关于html和body的背景颜色的一些变现 当给body设置背景颜色时(html没有背景颜色),这时body被当做根节点被浏览器俘获,浏览器界面的背景颜色就为body的background颜色:当 ...

  8. bzoj1101

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2319  Solved: 936[Submit][Status] ...

  9. ava Double: 四舍五入并设置小数点位数

    public static void main(String[] args) { // 1. 先乘后四舍五入, 再除; double d = 62.31060027198647; double d2 ...

  10. Ubuntu16.0.4安装搜狗输入法

    方法一: 1.进入搜狗linux输入法下载页面 2.进入下载好的文件目录,双击运行安装包(这点跟windows一样) 3.Ubuntu软件安装管理界面自动弹出,并显示安装按钮.点击就可以安装 方法二: ...