C#,简单,精巧,实用的按类型删除指定文件的工具软件

news2024/10/9 10:26:19

点击下载本文软件(积分):

https://download.csdn.net/download/beijinghorn/89059141icon-default.png?t=N7T8https://download.csdn.net/download/beijinghorn/89059141

下载审核通过之前,请从百度网盘下载(无积分):

https://pan.baidu.com/s/1P-UCB9MfUwA0L7JVAqPCWQ?pwd=dgw8icon-default.png?t=N7T8https://pan.baidu.com/s/1P-UCB9MfUwA0L7JVAqPCWQ?pwd=dgw8

1 功能介绍

按文件类型删除指定文件夹及其全部各级子目录内文档的工具软件;

程序员或非程序员每天需处理大量的文件,其中有很多实际上不需要长期保存或每天备份的垃圾级别的文件,因而需要一个工具能够按类别一次性删除这些文件。

基本功能是:

(1)搜索并统计、显示指定文件夹及其全部各级子目录内文档的数量,最小最大字节数,总字节数数;

(2)简便方式选择以指定删除的文件类型;

(3)一键删除选定类型的文件,DFS深度递归模式自动检索全部各级别子目录;

(4)可选定删除空文件夹;

(5)能适配空后缀类型文件;

(6)比较强的权限与容错机制;

2 欢迎界面

3 文件检索界面

选择删除的文件类型

删除之后,自动重新检索并统计。

可一键启用上次的选择。

4 部分源代码


/// <summary>
/// 表格显示文件数、最小最大、字节数及选择删除
/// </summary>
private string ShowFileSummary()
{
    StringBuilder sb = new StringBuilder();
    #region HTML 头部css
    sb.AppendLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
    sb.AppendLine("<html xmlns=\"http://www.w3.org/1999/xhtml\" >");
    sb.AppendLine("<head>");
    sb.AppendLine("<meta charset=\"UTF-8\">");
    sb.AppendLine("<style>");

    sb.AppendLine("* { font-family:Consolas,微软雅黑; }");

    sb.AppendLine("html,body { -webkit-text-size-adjust:none;padding:0px;background-color:#FFFF00; }");
    sb.AppendLine("input { font-size:15px; }");
    sb.AppendLine("img { cursor:pointer;border:0px;}");
    sb.AppendLine("table { border-collapse:collapse;font-size:15px; }");
    sb.AppendLine("td { padding:5px; } ");

    sb.AppendLine("input { padding:3px; }");
    sb.AppendLine("input[type=\"checkbox\"] { margin-right:5px;padding:0;width:17px;height:17px;cursor:pointer; }");
    sb.AppendLine("input[type=\"checkbox\"]:checked+label { color:#AA0000; }");
    sb.AppendLine("input[type=\"checkbox\"]+label { cursor:pointer;color:#000000;font-size:14px;margin-right:10px;padding-top:1px; }");
    sb.AppendLine("input[type=\"checkbox\"]+label:hover { cursor:pointer;color:#AA0000; }");
    sb.AppendLine("input,label { vertical-align:middle; }");

    sb.AppendLine(".r1 { background-color:#E1EFBA; }");
    sb.AppendLine(".r1:hover { background-color:#FFFFFF;font-weight:bold;border:dashed 1px #daac31;cursor:pointer; }");
    sb.AppendLine(".r2 { background-color:#EFFCCD; }");
    sb.AppendLine(".r3 { background-color:#86AA0C;color:#FFFFFF;}");
    sb.AppendLine(".r4 { background-color:#EFF8DB; }");
    sb.AppendLine(".r4:hover { background-color:#FFFFFF;font-weight:bold;border:dashed 1px #daac31;cursor:pointer; }");
    sb.AppendLine(".r5 { background-color:#EFF8DB;height:31px; }");
    sb.AppendLine(".r5:hover { background-color:#FFFFFF;font-weight:bold;border:dashed 1px #daac31;cursor:pointer; }");

    sb.AppendLine("</style>");
    sb.AppendLine("</head>");
    sb.AppendLine("<body oncontextmenu=\"return false\" ondragstart=\"return false\" onbeforecopy=\"return false\" oncopy=\"document.selection.empty()\" onselect=\"document.selection.empty()\" onselectstart=\"return false\">");
    #endregion

    sb.AppendLine("<table width='100%' border=1 bordercolor='#AAAAEE'>");
    sb.AppendLine("<tr class='r3'>");
    sb.AppendLine("<td>No.</td>");
    sb.AppendLine("<td>Extention</td>");
    sb.AppendLine("<td style='text-align:right;'>files</td>");
    sb.AppendLine("<td style='text-align:right;'>min-max</td>");
    sb.AppendLine("<td style='text-align:right;'>bytes</td>");
    sb.AppendLine("<td></td>");
    sb.AppendLine("</tr>");
    int idx = 0;
    int count = 0;
    long total = 0;
    foreach (ClassInfo fx in classes)
    {
        sb.AppendLine("<tr class=r5>");
        sb.AppendLine("<td>" + (idx + 1) + "</td>");
        sb.AppendLine("<td>" + (fx.Extention == zero_extention ? "." : fx.Extention) + "</td>");
        sb.AppendLine("<td style='text-align:right;'>" + fx.Count + "</td>");
        if (fx.Min == fx.Max)
            sb.AppendLine("<td style='text-align:right;'>" + ConvertFileSize(fx.Min) + "</td>");
        else
            sb.AppendLine("<td style='text-align:right;'>" + ConvertFileSize(fx.Min) + " - " + ConvertFileSize(fx.Max) + "</td>");
        sb.AppendLine("<td style='text-align:right;'>" + ConvertFileSize(fx.Length) + "</td>");
        sb.Append("<td style='text-align:center;'>");
        sb.Append("<input ");
        sb.Append("type='checkbox'");
        sb.Append("id='ext_" + idx + "' ");
        sb.Append("name='ext_" + idx + "' ");
        sb.Append("value='" + fx.Extention + "'");
        sb.Append(">");
        sb.Append("<label for='ext_" + idx + "'>del</label>");
        sb.Append("</td>");
        sb.AppendLine("</tr>");
        count += fx.Count;
        total += fx.Length;
        idx++;
    }
    sb.AppendLine("<tr class='r3'>");
    sb.AppendLine("<td>No.</td>");
    sb.AppendLine("<td>Extention</td>");
    sb.AppendLine($"<td style='text-align:right;'>{count} files</td>");
    sb.AppendLine("<td></td>");
    sb.AppendLine($"<td style='text-align:right;'>{ConvertFileSize(total)}</td>");
    sb.AppendLine("<td></td>");
    sb.AppendLine("</tr>");
    sb.AppendLine("</table>");

    sb.AppendLine("</body>");
    sb.AppendLine("</html>");

    return sb.ToString();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1568448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flume进阶学习!

本文图片来自于8.flume实时监控文件hdfs sink使用演示_哔哩哔哩_bilibili Apache Flume 的启动过程及其配置文件和脚本 在官网下载的Flume的压缩包中&#xff0c;.lib文件有大量的jar包&#xff0c;按道理说只有.lib文件就可以运行Flume程序了。只不过需要java -jar命令还要加…

二维码:技术、商业与未来

title: 二维码&#xff1a;技术、商业与未来 date: 2024/4/3 19:12:28 updated: 2024/4/3 19:12:28 tags: 二维码技术商业应用移动支付物联网AR/VR融合智能家居数字化社会 第一章&#xff1a;引言 1. 二维码在数字化时代的重要性和普及程度 在数字化时代&#xff0c;二维码作…

【吊打面试官系列】Redis篇 -使用过 Redis 做异步队列么,你是怎么用的?

大家好&#xff0c;我是锋哥。今天分享关于 【使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f; 一般使用 list 结构作为队列&#xff0c;rpu…

31. UE5 RPG使用增强输入激活GameplayAbility(一)

在前面文章中&#xff0c;我们实现了对技能添加并直接激活功能&#xff0c;介绍了GA的相关参数配置。现在&#xff0c;我们还不能通过键位触发技能&#xff0c;正常在游戏时&#xff0c;我们需要通过键位触发技能&#xff0c;实现技能的激活。 在UE5里面添加了增强输入&#xf…

简历复印--原型模式

1.1 夸张的简历 简历的打印。"对编程来说&#xff0c;简单的复制粘贴极有可能造成重复代码的灾难。我所说的意思你根本还没听懂。那就以刚才的例子&#xff0c;我出个需求你写写看&#xff0c;要求有一个简历类&#xff0c;必须要有姓名&#xff0c;可以设置性别和年龄&am…

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…

root@localhost‘s password: Permission denied, please try again.

编辑、etc/ssh/sshd_config文件 ,将PermitRootLogin这行改为yes rootubuntu:/home/ubuntu# vim /etc/ssh/sshd_config 重新加载改文件 /etc/init.d/ssh restart

uniapp 设置globalStyle navigationBarTitleText 不显示

设置全局的navigationBarTitleText但是没有显示 没效果: 原因: 这里实际上设置了navigationBarTitleText 为"" 所以不会使用全局的设置 解决方法就是直接将这一行代码删除

【逆向思考 】【拓扑排序】1591. 奇怪的打印机 II

本文涉及的知识点 逆向思考 拓扑排序 LeetCode1591. 奇怪的打印机 II 给你一个奇怪的打印机&#xff0c;它有如下两个特殊的打印规则&#xff1a; 每一次操作时&#xff0c;打印机会用同一种颜色打印一个矩形的形状&#xff0c;每次打印会覆盖矩形对应格子里原本的颜色。 一…

【教程】宝塔default.db占用空间几十g解决方法|宝塔占用磁盘空间特别大解决方法|宝塔磁盘被占满怎么清理

目录 一、前言二、排查问题三、解决方法 一、前言 用过宝塔创建网站&#xff0c;大家应该都非常熟悉&#xff0c;但是用随着用的时间越来越多&#xff0c;宝塔所占用的空间也越来越多&#xff0c;不停的加大数据盘都没有用&#xff0c;我原先买了30G够用了&#xff0c;随着时间…

基本数据类型、包装类与字符串间的转换

&#xff08;1&#xff09;基本数据类型转为字符串 方式1&#xff1a;调用字符串重载的valueOf()方法 int a 10; //String str a;//错误的String str String.valueOf(a);方式2&#xff1a;更直接的方式 int a 10;String str a "";&#xff08;2&#xff09;…

汽车EDI:如何与奔驰建立EDI连接?

梅赛德斯-奔驰是世界闻名的豪华汽车品牌&#xff0c;无论是技术实力还是历史底蕴都在全球汽车主机厂中居于领先位置。奔驰拥有多种车型&#xff0c;多元化的产品布局不仅满足了不同用户画像的需求&#xff0c;也对其供应链体系有着极大的考验。 本文将为大家介绍梅赛德斯-奔驰乘…

【深入理解计算机系统第3版】有符号数和无符号数转换以及移位运算练习题2.23

题目 考虑下面的C函数&#xff1a; int fun1(unsigned word) {return (int) ((word << 24) >> 24); }int fun2(unsigned word) {return ((int) word << 24) >> 24; } 假设一个采用补码运算的机器上以32位程序来执行这些函数。还假设有符号数值的右移…

代码随想录算法训练营第30天|LeetCode236.二叉树的最小公共祖先

代码随想录算法训练营第30天|LeetCode236.二叉树的最小公共祖先 1、LeetCode236.二叉树的最小公共祖先 236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 自底向上查找&#xff0c;有点难度&#xff01; | LeetCode&#xff1a;236. 二叉树的最近公共祖先_哔…

如何通过ArkTS卡片的Canvas自定义绘制能力实现五子棋游戏卡片

介绍 本示例展示了如何通过ArkTS卡片的Canvas自定义绘制能力实现一个简单的五子棋游戏卡片。 使用Canvas绘制棋盘和黑白棋子的落子。通过卡片支持的点击事件进行交互&#xff0c;让用户在棋盘上进行黑白棋子的对局。通过TS的逻辑代码实现五子棋输赢判定、回退等逻辑计算&…

7 X 24h智能安全运维再升级!Fortinet 全面集成全新 FortiGuard SOCaaS

数字化时代网络安全威胁层出不穷&#xff0c;网络犯罪分子的狡诈攻击手段不断翻新&#xff0c;传统安全防御手段亟需进化。更为棘手的是&#xff0c;网络安全专业人才的匮乏&#xff0c;让众多企业陷入安全运营的困境。为了有效应对这一挑战&#xff0c;Fortinet全新推出FortiG…

3DGS实时高质量大规模场景渲染最新SOTA!

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程&#xff1a;…

Qt自定义控件之Battery电池控件

文章目录 前言一、BasicBattery二、Battery控件三、效果总结 前言 在Qt应用程序开发中&#xff0c;自定义控件是一种常见的需求&#xff0c;开发者经常需要根据特定的需求创建定制化的控件来增强用户界面的交互性和美观性。Battery电池控件是一种常见的自定义控件&#xff0c;…

Codeforces Round 932 (Div. 2) ---- F. Andrey‘s Tree ---- 题解

F. Andreys Tree&#xff1a; 题目描述&#xff1a; 思路解析&#xff1a; 我们假设删除任意一个结点后&#xff0c;我们会将整个树切分为k个联通块&#xff0c;那么可以明确的知道我们只需要连接(k-1)条边就可以将这k个联通块重新连为一棵树。 那么最小代价是啥呢? 图解分…

代码随想录day35--动态规划的应用2||01背包理论基础、携带研究材料

01背包理论基础 有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值为 value[i]。每件物品只能用一次&#xff0c;将这些物品装入背包里物品价值总和最大。 这是很标准的背包问题&#xff0c;很多同学看到后很自然的就想到了背包&#xff0c;我们…