8000
Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Keen(刻痕)

指定任意单个文件,监听文件系统变化,自动保存历史版本,全程自动。

Keen 是一款轻量级的 Windows 桌面应用(系统托盘常驻):指定单个文件(而非整个文件夹),每次保存自动留一份带时间戳的版本副本——旧版永不覆盖,任意历史可回溯与恢复。任意文件类型(代码、文档、设计稿、视频工程……),全程无需人工操作;可以理解为一个针对单个文件的本地实时“时间机器”。

它针对的是 Windows 文件监听里那些「静默出错」的边界情况(编辑器原子改名、文件锁、NTFS 文件隧道、杀软瞬时锁、睡眠/恢复……),老工具往往因此漏存、或存成保存前的旧内容。详见 工作原理


快速开始

  1. 拿到 Release(自包含,无需另装运行时)。
  2. 双击 Keen.exe —— 托盘出现「刻痕」图标。
  3. 双击图标 → 直接把文件拖进去,或开 Explorer 右键后添加文件(需开启相关功能)。
  4. 更改文件,回主窗点 历史… 看版本。

单实例:已经开着时再启动,会转发指令后静默退出,不会出现第二个窗口。


特性

监听与存版

  • 文件级监听(指定单个文件,不是文件夹)
  • 任意类型;实时(保存即存,不靠定时)
  • 内容有变化就存一份新版本(SHA-256 判重,原样保存不产生冗余版本),旧版永不覆盖
  • 添加监控时先存一版当前状态作为基线
  • 文件改名/移动(同卷)自动跟随,历史延续

历史与恢复

  • 历史窗:时间 / 大小 / 较上一版增量 / 备注
  • 打开此版本、打开所在文件夹、导出另存
  • 恢复可逆:覆盖前自动留「恢复前快照」,可再撤回
  • 对比:接 WinMerge —— 选 1 个=与上一版比,选 2 个=两方,选 3 个=三方

集成与体验

  • 系统托盘常驻 + 主窗 + Explorer 右键「用 Keen 监控」
  • 拖拽文件进主窗即添加;双击文件列→历史,双击路径列→打开所在文件夹
  • 深浅色跟随系统;开机自启(可选);捕获失败弹通知
  • 保留策略(每文件留最近 N 版 / 清超过 X 天的)

日常使用

想做的事 操作
添加监控 主窗「添加文件…」/ 拖拽 / Explorer 右键「用 Keen 监控」
看某文件历史 主窗双击该行的文件名列,或选中后「历史…」
打开文件所在目录 主窗双击该行的路径
恢复到某个旧版本 历史窗选中 → 「恢复…」(当前状态会先存为快照)
对比两个版本 历史窗按 Ctrl/Shift 多选两行 → 「对比(WinMerge)」
临时停掉某个文件 主窗选中 → 「停止监控」(历史保留,「重新监控」和「恢复」都可用)
彻底删掉某文件的历史 主窗选中(已停止)→ 「彻底删除」
改设置 托盘 → 「设置…」

工作原理

保存 → 落库是一条五段管线:

FSW 事件
  → ① 500ms 尾沿防抖(合并连发)
  → ② 写静止 + 锁重试(20 次 / ~30s)+ FileId 校验打开
  → ③ 每文件有界队列(单消费,一个坏作业不杀消费线程)
  → ④ 流复制 + SHA-256(去重 / 基线 / 校验)
  → ⑤ WriteThrough+Flush → 原子 File.Move → 记 SQLite 索引

针对「静默出错」的关键对策:

风险 对策
原子改名剥离旧句柄 → 存成保存前的字节 复制前重开句柄并比对 FileId
NTFS 文件隧道让重建文件继承旧时间戳 catch-up 基线只信 内容哈希,不信时间戳
Office 等独占锁写入 写静止 + 锁重试
杀软/Defender 瞬时锁 .keenpartial → 丢版 失败留标记,30s 周期自动重投
覆盖原文件不原子 恢复前先存「恢复前快照」兜底(旧状态永远在库)
崩溃留临时孤儿 启动清扫 .keenpartial
多写者触发 SQLite WAL-reset 单写者连接

配置

托盘 → 设置…

默认 说明
保险库位置 %LOCALAPPDATA%\Keen\vault 重启生效,不自动迁移
每文件留最近 N 版 0(不限) 保留策略
清理超过 X 天的版本 0(不限) 保留策略
捕获失败时弹通知 Windows 原生通知
WinMerge 路径 留空则按注册表自动探测

数据与清理

位置 内容 怎么清
%LOCALAPPDATA%\Keen\config.json 配置 删文件
%LOCALAPPDATA%\Keen\vault\ keen.sqlite + 各 <guid>\<YYYY-MM>\ 版本 blob 你的历史数据,删目录即清
%LOCALAPPDATA%\Keen\logs\ 按天滚动日志,留 14 天 自动清理
注册表 HKCU\…\Run\Keen 开机自启(仅当开关开) 托盘「开机自启」关掉即删
注册表 HKCU\…\*\shell\Keen.Monitor Explorer 右键动词(仅当开关开) 托盘「Explorer 右键」关掉即删

从源码构建

需要 .NET 10 SDKnet10.0-windows,WinForms)。

dotnet build                # → build\Debug\
dotnet publish -c Release   # → build\Release\(框架依赖多文件,需目标机有 .NET 10 运行时)

默认框架依赖;要出给别人用的自包含完整包(无需另装运行时):

dotnet publish -c Release --self-contained -r win-x64

两种都是多文件形态(非单文件):更新时只需替换变化的文件(通常只有 Keen.dll),便于增量更新。


限制

不做:夹级监听、网络/UNC 路径、云同步、静态加密、自带文本差异查看器(用 WinMerge 代替)、自动更新(手动替换文件即可)。


许可

MIT

About

一个Windows 小工具,指定任意单个文件,监听文件系统变化,自动保存历史版本,全程自动。

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0