本文件面向开发者,记录系统架构、模块职责、关键流程、构建运行与测试方法,以及近期重要改动。对外宣传请参考 html/index.html(对外网站,仅负责介绍与宣传)。
- 目标:安全、可回退地释放系统盘空间,提供目录迁移、重复文件清理、磁盘分析等能力。
- 技术栈:Delphi VCL(Windows 原生)、本地 SQLite(见
MoveC.db及升级脚本)、Win32/Win64 支持。 - 安全性:防篡改/反调试、自修复(重启修复未完成交易)、HMAC/哈希校验(参见升级脚本与安全模块)。
目录结构(节选):
- 核心窗体与功能
uMain.pas主界面(工具栏与菜单入口、状态输出、AboutMe 安全模块)。uDirectoryMigration.pas目录迁移模块(并行复制、占用进程处理、校验/删除、联接创建与审计、断点与回滚、重启自愈)。uSmartDuplicateCleanup.pas智能重复清理(扫描、明细报告、分组折叠、策略勾选、回收站删除、硬链接替换)。uDiskAnalysis.pas磁盘分析(聚合统计、Top100 大文件、导出 CSV、只读分析)。uPostRebootRepair.pas重启自修复(处理pending_finalize/needs_junction等事务)。
- 安全与防护
uAntiDebug.pas、uAntiTamperPackage.pas、uSimpleSecureManager.pas、FrameAboutMe.*。
- 数据库与脚本
MoveC.db及UpgradeDatabase_*.sql(数据库升级脚本)。
- 网站(对外)
html/(index.html,styles.css,script.js)
-
uMain.pas- 入口与总线:创建工具栏与菜单入口(重复清理/目录迁移/磁盘分析),风险横幅提示。
- 集成 AboutMe 安全模块;初始化样式与 UI;输出状态日志。
-
uDirectoryMigration.pas- 并行复制:
TParallel.For+MaxDegreeOfParallelism = TThread.ProcessorCount - 1,I/O 节流(每 64 文件Sleep(1)) - 数据完整性:拷贝后做哈希/大小校验,校验通过再删除源文件。
- 事务与状态:将不同阶段写入事务(INI/DB),支持断点续迁、回滚、重启后自修复。
- 联接:
CreateDirectoryJunction()创建后调用VerifyJunction()审计;失败标记needs_junction并提示,重启后自愈。 - 占用处理:集成 Restart Manager(
frmLockingProcesses.pas/uRestartManager.pas)。
- 并行复制:
-
uSmartDuplicateCleanup.pas- 扫描:尺寸 → 头部哈希(如 64KB)→ 全量 SHA-256,减少误判与性能开销。
- 明细报告:
- 列表折叠为“组头 + 文件项”,组头双击折叠/展开;
- 列排序、过滤(仅显示已勾选)、分组过滤;
- 组级操作(本组留最新/全选/反选)、全局策略(每组保留最新/勾选30天前);
- 删除到回收站,校验“每组至少保留1个”;删除后刷新分组。
-
uDiskAnalysis.pas- 聚合统计:按根目录的顶层子目录聚合文件数量/总大小/最近写入时间;
- Top100 大文件:按大小降序列出,双击用资源管理器选择;
- 导出:当前页签导出为 CSV(UTF-8),
Summary.csv/Top100.csv; - 仅分析不改写数据。
-
uPostRebootRepair.pas- 处理
pending_finalize(继续收尾)、needs_junction(补建联接并校验)等,确保事务最终一致。
- 处理
- 扫描与勾选 → 迁移确认(风险提示)。
- 并行复制文件到目标(I/O 节流 + UI 节流),记录进度(
TInterlocked)。 - 文件校验通过后删除源文件;失败项记录等待修复。
- 删除空目录;若源根已空:删除源根 → 创建联接(Junction)→
VerifyJunction()审计:- 成功:事务标记完成。
- 失败:事务标记
needs_junction,提示用户,重启后由uPostRebootRepair自愈。
- 若源未清空:标记
pending_finalize,重启后继续收尾。 - 回滚:如遇联接,先移除联接再创建真实目录并回拷;结束时可选择“清空目标目录(回收站)”。
- 扫描重复组(尺寸 → 头部哈希 → 全量哈希)。
- 明细报告(组头折叠/排序/过滤/策略/组级操作),勾选目标。
- 删除策略:
- 同卷:硬链接替换(保留路径,可撤回)。
- 跨卷:回收站删除(可撤回)。
- 规则校验:“每组至少保留 1 个”。
- 指定根目录;
- 填充“聚合统计”与“Top100 大文件”;
- 支持导出 CSV(UTF-8)。
- 工程文件:
C盘瘦身.dproj(主程序),其它工具工程如ImportImages.dproj等。 - IDE:Delphi(建议 RAD Studio 10.x 或以上;若有具体版本要求,以团队环境为准)。
- 依赖:
- SQLite 动态库:
sqlite3.dll(已在根目录)。 - 运行需管理员权限的场景:创建 Junction、关闭占用进程、访问系统目录等。
- SQLite 动态库:
- 运行:
- Debug/Release 配置:Release 下启用更严格的防篡改与反调试策略。
- 建议以管理员身份运行可执行程序。
-
目录迁移
- 并行复制 + UI 更新流畅;
- 校验后删除源文件;联接创建并通过审计;失败进入自愈;
- 回滚可在存在联接/部分完成时完整恢复;
- 占用进程需“全选”后自动关闭;
- 边界:超长路径、权限不足、超大/海量小文件。
-
重复清理
- 扫描准确;
- 明细报告交互(折叠/排序/过滤/策略/组级操作)可用;
- 删除规则校验、回收站撤回、同卷硬链接替换。
-
磁盘分析
- 聚合统计与 Top100 正常填充;
- 双击定位、CSV 导出可用;
- 仅分析不写入。
-
目录迁移
- 并行度自适应(CPU 线程数 - 1,最小 1)、I/O 节流(每 ~64 文件 Sleep(1))。
- 联接创建后
VerifyJunction()审计,失败标记needs_junction并提示;重启自愈。
-
重复清理
- 明细报告增强:折叠/展开组头、分组过滤、列排序、仅显示勾选、组级操作、全局策略、统计显示;
- 删除遵循“每组至少留 1 个”,并回收站删除/同卷硬链接替换。
-
磁盘分析
- 新增
uDiskAnalysis: 聚合统计 + Top100 大文件;导出 CSV;双击定位;只读分析。
- 新增
-
主界面与网站
- 工具栏 & 菜单接入“磁盘分析”;
- 网站新增“磁盘分析”亮点、增加“联接安全审计与回退校验”说明。
- UI 与工作线程分离:工作线程内不直接操作 VCL 控件,通过
TThread.Queue节流更新。 - 进度统计用
TInterlocked; - 关键路径异常要落盘(事务/日志)并给出中文友好提示;
- 删除与迁移默认走“可撤回通道”(回收站/回滚)。
- 磁盘分析可视化(轻量图表)、类型/时间维度筛选与导出报告;
- 清理规则(模式/白名单/年龄阈值)的只读预览 + 手动确认;
- 自动化/计划任务:暂不实施,后续评审再定档。
如需补充或勘误,请在 PR 中更新本文件,并在提交信息中引用对应模块与变更点。