find-my-files

Windows 専用のファイル名検索。NTFS の $MFT を直接読み、 USN ジャーナルで更新を反映する。Rust エンジンと WinUI 3 UI。 ファイル名のみを索引する。

Apache-2.0 ライセンス · Windows 10/11 (NTFS)

仕組み

  • $MFT 直読みによる初回インデックス — NTFS の Master File Table を直接読み、1ボリュームあたり数秒で全ファイル名を取り込む。
  • USN ジャーナルによる更新 — 通常はファイル監視や全件再スキャンをせず差分を反映し、変更は約1秒で UI に届く。ジャーナルの連続性を失った場合だけ索引を安全に再構築する。
  • マルチスレッド検索 — インメモリ索引上を部分一致で走査。100万件規模でも打鍵に追従するミリ秒級で返す。
  • ネイティブ WinUI 3 — Mica、ダークテーマ、Per-Monitor V2 DPI。
  • 省メモリ — ファイル名のみを索引するため、100万件で約100MB。
  • 権限分離 — MFT/USN 読み取りの特権は Windows サービスに分離。UI は非特権で、同一ユーザー限定の名前付きパイプで通信する。

スコープ外

ファイル名のみを索引する。以下は対象外。

  • content 検索
  • プロパティ・タグ索引
  • プレビュー
  • FTP / HTTP サーバ
  • FAT / exFAT / ネットワークドライブ
  • ReFS
  • クロスプラットフォーム

性能

待ち時間を感じる場所を残さない。

  • 初回インデックス — 一般的な C: ドライブで数秒。以後の起動はスナップショットから即座に立ち上がる。
  • 検索 — 打鍵ごとに走り、100万件規模でもミリ秒級で返る。
  • 更新の反映 — 作ったばかりのファイルが、ほぼ即座に結果へ現れる。

具体的な数値目標と測定条件はリポジトリの回帰ゲートが定義し、リリースごとに検証している。

アーキテクチャ

既定は非特権 UI + サービス。サービスがない場合、非特権ではセットアップへ進み、既に昇格済みの起動だけが in-proc へフォールバック。

WinUI 3 app(C#・非特権) ──named pipe──▶  fmf-service(Rust・LocalSystem)
   └─ IEngineClient 境界                       └─ fmf-core: $MFT走査・USN tailing・
       ├─ PipeEngineClient(既定)                  インメモリ索引・クエリエンジン
       └─ FfiEngineClient ──P/Invoke──▶  fmf_engine.dll(昇格済み起動のみ)

はじめる

Windows 10/11 (NTFS)。zip を展開して起動し、初回だけ UAC 1回でサービスを登録する。

ソースからのビルド手順は GitHub リポジトリの README にある。