# searchFile **Repository Path**: haoood/search-file ## Basic Information - **Project Name**: searchFile - **Description**: search-file 是一款 Windows 桌面文件搜索工具,支持多条件文件名与内容扫描,并可在局域网内共享搜索关键词和文件参考。 - **Primary Language**: JavaScript - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-10-12 - **Last Updated**: 2026-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: 文件查找, 局域网协作 ## README # search-file search-file 是一个基于 Tauri 2 的 Windows 桌面文件搜索工具。它以显式扫描任务为核心,支持多条件文件名/内容搜索、多磁盘范围选择、任务进度查看,并可在局域网内与其他客户端共享关键词、文件参考和实时搜索动态。 > 当前版本为 `0.1.0` 开发版。主要开发和验收环境为 Windows 10/11,Windows 7 SP1 已做可用性验证,但需要使用冻结版 WebView2 109。 ![软件主界面占位图:打开应用后的完整窗口,包含任务构建区、状态面板、结果区和共享库](imgs/overview.png) ## 功能特性 - 显式扫描任务:支持多个搜索条件、任一命中/全部命中策略、文件名/内容/两者匹配范围。 - 多范围扫描:可选择整块磁盘或指定目录;任务按根目录展示进度、扫描数、匹配数和耗时。 - 文件内容搜索:支持常见文本、代码、配置等格式,并对 Office、PDF 做结构化文本提取。 - 流式结果:扫描过程中即可查看已发现文件,结果按 50 条分页加载。 - 结果操作:查看命中详情、按列排序、打开所在目录、直接打开文件、复制路径。 - 局域网协作:自动发现同网段设备,支持手动配置跨网段对端 IP,实时同步关键词、文件参考和任务动态。 - 会话数据边界:任务、结果、共享条目和统计保存在运行内存中;仅客户端设置、搜索历史和窗口布局写入本地 SQLite。 ## 技术架构 ### 总体结构 ```text +--------------------------------------+ | Vue 3 单窗口 GUI | | 任务构建 / 结果详情 / 协作状态面板 | +----------------+--------------------+ | Tauri IPC + Event +----------------v--------------------+ | Rust 应用核心层 | | Command API / 事件广播 / 状态管理 | +-------+------------+---------------+ | | | 扫描任务引擎 内容提取模块 协作通信模块 | | | 文件系统遍历 SQLite 设置库 UDP 广播/单播 ``` 前端通过 Tauri command 发起任务和设置变更,通过 `scan-task-changed`、`collab-state-changed` 事件接收任务与协作状态更新。扫描在 Rust 的阻塞 worker 中执行,避免大目录遍历阻塞 UI。 ### 技术栈 | 层 | 技术 | | --- | --- | | 前端 | Vue 3、Pinia、Vite、Lucide 图标 | | 桌面框架 | Tauri 2、系统 WebView / WebView2 | | 后端 | Rust 2024、Tokio、ignore、rusqlite | | 文档解析 | encoding_rs、calamine、pdf-extract、quick-xml、zip、cfb | | 系统能力 | Tauri dialog、clipboard-manager、opener 插件 | | 打包 | NSIS exe 安装包,内置 WebView2 download bootstrapper | ### 目录结构 ```text search-file/ ├─ LICENSE ├─ README.md ├─ imgs/ # README 截图 └─ search-file/ # 应用工程 ├─ docs/ # 需求、设计和任务拆分 ├─ src/ # Vue 前端 │ ├─ App.vue # 单窗口主界面 │ ├─ stores/app.js # Pinia 状态与任务状态合并 │ └─ api.js # Tauri command 封装 ├─ src-tauri/ # Rust 后端与 Tauri 配置 │ ├─ commands.rs # 前端可调用 API │ ├─ engine.rs # 扫描调度、遍历、命中聚合 │ ├─ search.rs # 文件名/内容匹配与类型过滤 │ ├─ content_extract.rs # Office/PDF 结构化文本提取 │ ├─ tasks.rs # TaskRegistry、进度与结果缓存 │ ├─ drives.rs # Windows 磁盘清单 │ ├─ collab.rs # 设备发现、共享同步、实时活动 │ ├─ settings.rs # SQLite 设置与历史 │ └─ models.rs # 前后端数据模型 └─ package.json ``` ### 关键设计 - 所有搜索必须通过“开始扫描”或 `Ctrl + Enter` 显式启动;输入过程不会触发磁盘遍历。 - v1 不构建持久化全文索引,文件名按需匹配,内容按需流式读取,Office/PDF 按格式提取文本。 - 扫描任务、任务结果、共享条目、反馈、在线状态和成果统计均为运行期内存数据;应用退出后不恢复。 - SQLite 仅保存客户端名称、默认扫描范围、隐藏文件偏好、手动对端 IP、搜索历史和窗口布局。 - 协作为同级别 P2P 模式:同网段自动广播发现,跨网段通过手动 IP 单播心跳;无需中心服务器。 ## 使用说明 ### 1. 启动软件 开发者可从源码启动: ```powershell cd search-file pnpm install pnpm tauri dev ``` 安装版用户直接运行 NSIS 安装包生成的 `search-file` 应用。若系统缺少 WebView2,安装器会自动下载并安装对应运行时。 软件打开后是一个单窗口界面:顶部为扫描任务构建区,左侧为实时动态、任务进度和成果统计,右侧为搜索结果和命中详情,底部为共享库。 ### 2. 创建扫描任务 ![创建任务占位图:顶部任务构建区,展示条件输入、匹配范围、任务策略、磁盘范围和任务篮子](imgs/create-task.png) 1. 在“条件”输入框中输入关键词,按 `Enter` 添加条件;按 `Ctrl + Enter` 可添加条件并立即启动扫描。 2. 在“匹配”下拉框中选择条件作用于文件名、文件内容或两者。 3. 在“任务策略”中选择“任一命中”或“全部命中”。 4. 如需限制文件类型,在“任务类型”中选择文档、图片、视频等类型。 5. 在“范围”中勾选磁盘,或点击“添加目录”选择自定义目录;可点击刷新图标更新磁盘状态。 6. 确认任务篮子中的条件和范围无误后,点击“开始扫描”。 默认会预选当前所有可访问磁盘。扫描前请明确检查范围,避免不必要的大范围磁盘遍历。若未添加条件或未选择范围,开始按钮会保持禁用并提示原因。 ### 3. 查看任务进度 ![任务进度占位图:左侧状态面板中的任务与磁盘进度,以及结果区顶部的任务摘要](imgs/scan-progress.png) 任务开始后: - 左侧“任务与磁盘进度”会显示任务状态、创建时间、条件摘要、范围摘要、扫描数、匹配数和耗时。 - 展开当前任务后,可查看每个根目录的状态与计数;某个目录失败不会中断其他目录。 - 点击任务可切换结果区显示的任务。 - 任务运行中或排队时,结果摘要会显示“终止任务”按钮;点击后只终止当前任务,不影响其他任务。 在没有持久索引的情况下,软件不展示虚假的真实百分比;进度以状态、扫描数、匹配数、耗时和完成时间表达。 ### 4. 查看和操作结果 ![搜索结果占位图:结果列表与右侧命中详情,包含文件名、路径、大小、修改时间、命中条件和内容摘要](imgs/results-detail.png) 结果区会在扫描过程中流式显示已发现文件,并按 50 条一页滚动加载。列表包含文件名、路径、大小、修改时间和操作。 - 点击结果行可在右侧查看命中详情;内容命中会显示行号、结构化位置和摘要。 - 点击“文件名 / 路径 / 大小 / 修改时间”列头可切换排序。 - 点击文件夹图标打开所在目录;这是默认推荐操作。 - 点击复制图标复制完整路径。 - 点击分享图标将文件参考共享给在线设备。 - 右键结果或点击“更多操作”可选择:打开所在目录、打开文件、复制路径、分享路径、分享文件名。 - 双击结果行等同于打开所在目录。 搜索条件支持常见文本、代码、配置、Markdown、JSON Notebook、邮件、字幕,以及 Word、Excel、PowerPoint、PDF 等白名单格式。加密、损坏、无文本层或超过限制的文件会跳过并记录警告,不会中断整体任务。 ### 5. 使用共享库协作 ![共享库占位图:底部共享库中的关键词和文件参考标签,以及有帮助、重新分享、撤回等操作](imgs/shared-library.png) 同一局域网内的在线客户端会自动互相发现。跨网段或特殊网络环境下,可在设置中添加对端 IPv4 地址。 共享库支持两类条目: - 关键词:来自任务篮子中条件的显式分享,仅包含条件文本。 - 文件参考:包含文件名、路径、大小、修改时间和来源信息。 常用协作操作: - 点击任务篮子中条件旁的“分享”按钮,将关键词共享给在线设备。 - 点击结果行中的分享图标,将文件参考共享给在线设备。 - 点击共享库标签,将关键词或文件名加入任务篮子;加入后可为关键词调整匹配范围。 - 文件参考不会作为本机扫描根目录;默认提取文件名作为搜索条件,并检查路径是否在本机存在。 - 标签旁的按钮支持标记有帮助、重新分享;自己分享的条目可以撤回,撤回会在所有在线设备同步删除。 共享条目、反馈统计和成果统计只在当前运行会话中保留。最后一个客户端关闭后,协作数据会自动销毁;本地搜索历史和客户端设置不受影响。 ### 6. 配置客户端 ![设置对话框占位图:客户端名称、搜索根目录、手动对端 IP、隐藏文件和公开搜索条件设置](imgs/settings.png) 点击标题栏右侧的设置图标,可配置: - 客户端名称:其他设备在实时动态和设备列表中看到的名称。 - 搜索根目录:保存应用重启后的默认扫描范围。 - 手动对端 IP:用于跨网段或自动发现失效时直连其他客户端。 - 包含系统隐藏文件:控制系统隐藏文件是否参与扫描。 - 公开我的搜索条件:默认关闭;开启后,实时动态才会向其他设备展示你的具体搜索条件。 窗口布局、状态面板宽度、共享库高度和折叠状态也会保存到本地,重启后自动恢复。 ## 开发与构建 前置要求: - Node.js 20+ 与 pnpm - Rust stable 工具链 - Windows 10/11 开发环境 - WebView2 运行时 常用命令: ```powershell cd search-file pnpm install pnpm dev # 仅启动 Vite 前端 pnpm tauri dev # 启动桌面应用 pnpm build # 构建前端 ``` Rust 检查与测试: ```powershell cd search-file/src-tauri cargo check cargo test ``` 生成 Windows NSIS 安装包: ```powershell cd search-file pnpm tauri build ``` 构建产物位于 `search-file/src-tauri/target/release/bundle/nsis/`。 ## 兼容性 - 主要目标:Windows 10/11 x86_64。 - 最低验证环境:Windows 7 SP1;需使用 WebView2 109,且该运行时自 2023 年 1 月后不再获得安全更新。 - Windows 11 通常内置 WebView2;Windows 10 依赖系统更新或安装包引导安装。 - 信创 Linux 暂缓支持,待 Tauri/WebKitGTK 在目标发行版上的可行性评估完成后重启。 ## 项目文档 - [需求文档](search-file/docs/requirements.md) - [设计文档](search-file/docs/design.md) - [任务拆分](search-file/docs/tasks.md) ## License 请查看 [LICENSE](LICENSE)。