Skip to content

Repository files navigation

CdiskClean - C 盘文件监控与磁盘清理工具

基于 .NET 8 (WinForms) 的 Windows 桌面应用。实时监控 C 盘(或其他磁盘)的文件变化并识别触发变化的进程(应用/服务/用户),同时提供磁盘空间分析、目录扫描与多方式文件清理能力,帮助更好地管理 C 盘空间。

功能特性

1. 磁盘概览

  • 实时显示磁盘总容量、已用、剩余空间与使用率
  • 使用率按阈值着色:>90% 红色 / >70% 橙色 / 其余绿色
  • 剩余空间低于 10GB 时显示警告,点击警告直接跳转磁盘清理页
  • 定时自动刷新磁盘信息

2. 实时监测

  • 基于 FileSystemWatcher(FSW)监控文件创建/修改/删除/重命名
  • 基于 ETW 内核事件(TraceEvent)识别触发文件变化的来源进程
  • 通过延迟归因队列解决 FSW 先于 ETW 触发的时序问题,最大程度还原"谁动了文件"
  • 监测目录列表:添加 / 禁用 / 启用 / 删除,状态持久化到 SQLite(USING / FORBIDDEN / DELETED)
  • 高级添加监测目录:以任意目录为基础,在新窗口中树状勾选其子路径(懒加载),一次批量添加多个监测目录
  • 变更记录按类型过滤(全部/创建/修改/删除/重命名),支持导出 CSV
  • 内存记录上限 5000 条,数据库保留最近 50000 条

3. 忽略进程

  • 支持将变更记录拖拽到忽略进程列表(需先暂停监测)、手动输入进程名,或通过高级添加在进程列表窗口中搜索选择当前运行进程批量添加
  • 忽略列表同步进 ETW 黑名单,被忽略进程的文件操作不再记录
  • 内置常用忽略项(搜索索引、系统服务、杀毒软件等)
  • 状态持久化,支持禁用/启用/删除

4. 进程操作右下角提醒

  • 进程首次操作开始计时,空闲超过阈值(默认 2 秒,NotificationService.IdleDelaySeconds 可调)后,通过托盘气泡提醒: 「进程 XXX 在 XX 秒 内 对监控目录 执行了 XXX 次操作」
  • 提醒记录持久化到数据库,可在统计窗口查看
  • 右下角提醒与统计按钮相互独立

5. 统计窗口

  • 提醒记录列表(进程、次数、持续时间、触发时间)
  • 进程操作统计(按进程分组:操作次数、首次/最后操作时间)
  • 详细变更记录列表

6. 文件夹分析

  • 选择目录后递归扫描,树状展示各级文件夹大小与文件数
  • 支持取消扫描;跳过符号链接/挂载点(重解析点),避免循环与重复统计

7. 磁盘清理

  • 高频修改路径参考:基于变更记录按目录分组统计变更最频繁的路径,单击选中为基础路径、双击直接扫描
  • 目录扫描:递归、可取消、跳过重解析点与无权限目录;超大目录(>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(文件硬链接)

快速开始

  1. 环境要求:Windows 10/11,.NET 8 SDK
  2. 构建运行:
    dotnet build
    dotnet run
    或直接用 Visual Studio 打开 CdiskClean.sln 构建运行。
  3. 建议以管理员权限运行: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」仅隐藏到托盘,退出程序请使用托盘菜单「退出」

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages