Skip to content
ning696Public

About

FilePulse 是一款基于 Tauri、Rust 和 NTFS MFT/USN Journal 构建的 Windows 本地文件搜索工具,支持高速索引、快照加载和增量同步。

Resources

Stars

21 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

FilePulse - Windows 本地文件搜索

Windows Rust Tauri React Status

FilePulse 是一个正在构建中的 Everything-like Windows 桌面文件搜索工具。

它不是简单地递归遍历目录,而是尝试走更接近 Everything 的路线:读取 NTFS 文件系统自己的元数据建立索引,用 USN Journal 增量同步变化,并把索引快照持久化到本地。

目标:将 FilePulse 打造成一个轻量、快速、可研究、可扩展的本地文件搜索器,让 Rust + Tauri 成为桌面效率工具的漂亮样板。

📖 项目博客:CSDN博客链接

为什么值得关注

  • 接近 Everything 的底层方向:使用 NTFS MFT / USN Journal,而不是只靠普通目录遍历。
  • Rust 后端:索引、路径重建、快照、增量变更合并都放在 Rust 核心里,利于性能和可靠性。
  • Tauri 桌面端:比传统 Electron 更轻,前端仍然保留 React + TypeScript 的开发体验。
  • 启动后可加载快照:索引完成后保存到本地,下次打开应用可以直接恢复搜索状态。
  • 适合学习 Windows 文件系统索引:代码里能看到 MFT 枚举、USN Journal、路径树重建这些真实工程问题。

当前功能

能力 状态 说明
选择本地 NTFS 卷 已实现 支持 C:\、D:\、F:\ 这类本地固定 NTFS 卷
MFT/USN 建立索引 已实现 通过 FSCTL_ENUM_USN_DATA 枚举卷内文件记录
文件名/路径搜索 已实现 大小写不敏感,默认最多返回 500 条结果
索引快照 已实现 使用 serde + bincode 保存到本地 app data
启动加载快照 已实现 应用启动时尝试加载上次选择卷的快照
USN 增量同步 已实现 通过 FSCTL_READ_USN_JOURNAL 自动追读增量变更
打开/定位文件 已实现 调用 Tauri opener 插件
后台监听变化 已实现 应用运行期间每秒追读 USN Journal,并向前端推送更新事件
Windows Service 计划中 当前 MVP 推荐管理员权限运行
文件大小补全 计划中 当前 MFT/USN 路径中文件大小显示为“未知”

页面如图

img.png

设计思路

传统 MVP 文件搜索通常是:

选择目录 -> walkdir 递归扫描 -> Vec<FileEntry> -> 搜索

这个项目现在走的是更底层的卷级索引路线:

选择 NTFS 卷
  -> 打开 \\.\F: 卷句柄
  -> 查询 USN Journal 状态
  -> FSCTL_ENUM_USN_DATA 枚举 MFT/USN 记录
  -> 根据 file_ref / parent_ref 重建完整路径
  -> 建立内存索引
  -> 保存二进制快照
  -> 下次启动加载快照
  -> 后台持续追读 USN Journal 增量变化

核心区别是:文件系统本身已经维护了一套文件记录和变化日志,我们尽量利用它,而不是每次都从目录树重新走一遍。

架构概览

flowchart LR
  UI["React / TypeScript UI"] --> Commands["Tauri Commands"]
  Commands --> Index["Rust SearchIndex"]
  Commands --> NTFS["Windows NTFS API"]
  Commands --> Storage["Snapshot Storage"]

  NTFS --> MFT["FSCTL_ENUM_USN_DATA"]
  NTFS --> USN["FSCTL_READ_USN_JOURNAL"]
  MFT --> Index
  USN --> Index
  Index --> Storage
  Storage --> Index
  Index --> UI
Loading

核心模块

src-tauri/src/core/windows_ntfs.rs  # 卷枚举、MFT 枚举、USN 读取
src-tauri/src/core/index.rs         # 内存索引、路径重建、增量变更合并
src-tauri/src/core/storage.rs       # 索引快照保存和加载
src-tauri/src/core/search.rs        # 搜索匹配、排序、结果限制
src-tauri/src/monitor.rs            # 后台监听、退避重试、快照节流与事件推送
src-tauri/src/commands.rs           # Tauri 命令入口
src/App.tsx                         # 桌面 UI

技术栈

  • 桌面框架:Tauri v2
  • 前端:React 19 + TypeScript + Vite
  • 后端:Rust
  • Windows API:windows-sys
  • 索引来源:NTFS MFT / USN Journal
  • 快照格式:serde + bincode
  • 包管理:pnpm

快速开始

1. 准备环境

需要:

  • Windows
  • Node.js LTS
  • pnpm
  • Rust stable MSVC
  • Microsoft C++ Build Tools,包含 “Desktop development with C++”
  • Microsoft Edge WebView2 Runtime

建议确认 Rust 使用 MSVC 工具链:

rustup default stable-msvc

2. 安装依赖

cd F:\MyProject\myeverthing\FilePulse
pnpm install

3. 启动应用

MFT/USN 读取卷通常需要管理员权限。建议用“以管理员身份运行”的 PowerShell 启动:

pnpm tauri dev

如果只启动前端页面:

pnpm dev

完整功能必须通过 pnpm tauri dev 启动,因为索引、搜索和 USN 同步都依赖 Tauri 后端。

使用方式

  1. 启动应用。
  2. 在顶部下拉框选择一个本地 NTFS 卷。
  3. 点击“建立索引”。
  4. 在搜索框输入文件名或路径关键词。
  5. 文件新增、删除、重命名后,后台监听会自动刷新索引和当前搜索结果。
  6. 关闭应用后,下次启动会尝试自动加载上次保存的索引快照。

开发命令

前端构建:

pnpm build

Rust 测试:

cd src-tauri
cargo test

Tauri 开发启动:

pnpm tauri dev

常见问题

提示权限不足

MFT/USN 需要打开卷句柄,例如:

\\.\F:

如果提示权限不足,请用管理员 PowerShell 启动:

pnpm tauri dev

USN Journal 失效

如果应用提示 USN Journal 已失效或记录已被清理,需要点击“重建索引”。这表示系统已经清理了应用上次快照之后所需的 USN 记录,无法保证增量同步完整性。

文件大小为什么是“未知”

当前 MFT/USN 索引版本优先实现文件名、路径和目录结构搜索。USN 记录不直接提供普通文件大小,所以 MVP 中文件大小显示为“未知”。后续可以对可见结果做异步 metadata 补全。

路线图

  • Tauri + React + Rust 桌面应用骨架
  • 中文搜索 UI
  • 本地 NTFS 卷选择
  • MFT/USN 初次索引
  • 索引快照保存和启动加载
  • 手动 USN Journal 同步
  • 应用运行期间后台同步 USN Journal
  • 可见结果异步补全文件大小、修改时间等 metadata
  • Windows Service,避免每次手动管理员启动
  • 更丰富的查询语法:ext:、path:、is:dir、regex:
  • 虚拟列表,支撑百万级结果滚动
  • 托盘、全局快捷键、开机启动
  • 打包发布 Windows 安装包

当前限制

  • 只支持 Windows。
  • MVP 主路径只支持本地 NTFS 卷。
  • 当前没有 Windows Service,建议管理员权限运行。
  • 后台监听仅在应用进程运行期间生效,关闭应用后不会作为 Windows Service 常驻。
  • 文件大小暂未从普通 metadata 补全。
  • 这是学习型和实验型项目,距离完整替代 Everything 还有距离。

如果你也对这些方向感兴趣,欢迎 Star、Fork 或提交改进建议。

About

FilePulse 是一款基于 Tauri、Rust 和 NTFS MFT/USN Journal 构建的 Windows 本地文件搜索工具,支持高速索引、快照加载和增量同步。

Resources

Stars

21 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages