基于 .NET 8 (WinForms) 的 Windows 桌面应用。实时监控 C 盘(或其他磁盘)的文件变化并识别触发变化的进程(应用/服务/用户),同时提供磁盘空间分析、目录扫描与多方式文件清理能力,帮助更好地管理 C 盘空间。
- 实时显示磁盘总容量、已用、剩余空间与使用率
- 使用率按阈值着色:>90% 红色 / >70% 橙色 / 其余绿色
- 剩余空间低于 10GB 时显示警告,点击警告直接跳转磁盘清理页
- 定时自动刷新磁盘信息
- 基于
FileSystemWatcher(FSW)监控文件创建/修改/删除/重命名 - 基于 ETW 内核事件(
TraceEvent)识别触发文件变化的来源进程 - 通过延迟归因队列解决 FSW 先于 ETW 触发的时序问题,最大程度还原"谁动了文件"
- 监测目录列表:添加 / 禁用 / 启用 / 删除,状态持久化到 SQLite(USING / FORBIDDEN / DELETED)
- 高级添加监测目录:以任意目录为基础,在新窗口中树状勾选其子路径(懒加载),一次批量添加多个监测目录
- 变更记录按类型过滤(全部/创建/修改/删除/重命名),支持导出 CSV
- 内存记录上限 5000 条,数据库保留最近 50000 条
- 支持将变更记录拖拽到忽略进程列表(需先暂停监测)、手动输入进程名,或通过高级添加在进程列表窗口中搜索选择当前运行进程批量添加
- 忽略列表同步进 ETW 黑名单,被忽略进程的文件操作不再记录
- 内置常用忽略项(搜索索引、系统服务、杀毒软件等)
- 状态持久化,支持禁用/启用/删除
- 进程首次操作开始计时,空闲超过阈值(默认 2 秒,
NotificationService.IdleDelaySeconds可调)后,通过托盘气泡提醒: 「进程 XXX 在 XX 秒 内 对监控目录 执行了 XXX 次操作」 - 提醒记录持久化到数据库,可在统计窗口查看
- 右下角提醒与统计按钮相互独立
- 提醒记录列表(进程、次数、持续时间、触发时间)
- 进程操作统计(按进程分组:操作次数、首次/最后操作时间)
- 详细变更记录列表
- 选择目录后递归扫描,树状展示各级文件夹大小与文件数
- 支持取消扫描;跳过符号链接/挂载点(重解析点),避免循环与重复统计
- 高频修改路径参考:基于变更记录按目录分组统计变更最频繁的路径,单击选中为基础路径、双击直接扫描
- 目录扫描:递归、可取消、跳过重解析点与无权限目录;超大目录(>5 万节点)自动降级为仅目录树以保持流畅
- 三态勾选树:父目录全选/半选/未选级联刷新,根节点不可勾选防止误删基础路径
- 五种清理方式:
方式 说明 回收站删除 可恢复,历史记录支持定位回收站 永久删除 不可恢复,提示释放空间 移动到目标目录 重名自动加时间戳后缀 压缩到目标目录 打包为 zip 后删除原文件,提示选中文件总大小 mkLink 软链接 迁移到目标目录并在原位置创建链接(目录=联接 junction /J,文件=硬链接 /H) - 安全校验:程序自身目录、驱动器根目录、系统目录(Windows / Program Files / ProgramData)拒绝清理;目标目录不能位于待清理目录内部
- 清理期间自动忽略自身产生的监控事件,避免"自己监听到自己"
- 清理历史记录(时间/路径/方式/结果),右键可复制路径、回收站记录可打开回收站定位
- 清理完成后右下角通知,并自动重新扫描刷新剩余文件
- .NET 8 (WinForms)
- Microsoft.Data.Sqlite(SQLite,WAL 模式)
- Microsoft.Diagnostics.Tracing.TraceEvent(ETW 内核文件事件)
- Win32 API:
SHFileOperation(回收站)、CreateHardLinkW(文件硬链接)
- 环境要求:Windows 10/11,.NET 8 SDK
- 构建运行:
或直接用 Visual Studio 打开
dotnet build dotnet run
CdiskClean.sln构建运行。 - 建议以管理员权限运行:ETW 内核会话需要管理员权限,否则来源进程归因不可用。
首次运行在程序目录生成 CdiskClean.db,包含 5 张表:
| 表 | 用途 |
|---|---|
| WatchDirectories | 监测目录(路径、是否含子目录、状态) |
| ChangeRecords | 文件变化记录(时间、类型、路径、大小、来源进程) |
| ProcessNotifications | 进程操作提醒记录 |
| IgnoreProcessRecord | 忽略进程列表 |
| CleanupRecords | 清理历史记录 |
CdiskClean/
├── Forms/ # 窗口与交互(Form1 主窗口、StatisticForm 统计、BetterDirAddForm 高级添加监测目录、ProcessPickForm 进程选择)
├── Services/ # 业务服务(磁盘监控、ETW、通知、清理、数据库、磁盘空间、文件夹分析)
├── Models/ # 实体与枚举
├── Helpers/ # 工具类(回收站、路径、日志、样式、枚举)
└── testCases/ # 功能测试用例集(回归测试参考)
功能测试用例集位于 testCases/,覆盖各模块的正向/异常场景,作为后续回归测试的参考测试集。
- ETW 来源进程识别需要管理员权限
- 文件 mkLink(硬链接)要求源与目标位于同一磁盘卷;目录 mkLink(联接)支持跨卷
- 被其他进程独占打开的文件无法移动/删除,程序会多次重试(约 14 秒)并提示关闭占用程序
- 默认仅监控 C 盘常见目录(桌面、文档、下载、临时目录等),可在设置中添加任意目录
- 点击右上角「X」仅隐藏到托盘,退出程序请使用托盘菜单「退出」