articulite/BetterCopy
GitHub: articulite/BetterCopy
一款基于 Rust 的 Windows 并行文件复制与删除引擎,通过自动调优和全局热键显著提升资源管理器的文件操作性能。
Stars: 54 | Forks: 1
# BetterCopy

[](LICENSE)
[](https://microsoft.com)
[](https://www.rust-lang.org/)
**BetterCopy** 是一款专为 Windows 设计的自动调优、并行复制与删除引擎。它提供了一个极速的替代方案来执行原生的文件复制和删除操作,直接绑定到全局热键(粘贴为 **`Ctrl+Shift+V`**,删除为 **`Ctrl+Shift+Delete`**),仅当你的焦点位于 Windows 文件资源管理器或桌面时才会激活。
### ✦ 实际效果展示
BetterCopy 与 Windows 文件资源管理器的对比(为简洁起见,资源管理器的回放速度提高了 6 倍):
https://github.com/user-attachments/assets/45a0fd7e-2392-4fd9-84ee-0f99900cf103
## ✦ 理念
BetterCopy 的设计初衷是**以极低的用户使用成本,对典型的 Windows 文件复制性能产生最大的提升**。
它不与 TeraCopy 或 FastCopy 等功能丰富的专业用户工具竞争,也不旨在支持云端硬盘等复杂环境。其目标是让普通用户在无需思考的情况下,获得更好的复制体验。
它围绕着一个简单且坚定不移的品牌承诺而构建:
* **无需管理员权限:** 完全在用户空间运行。没有提权提示,不绕过 UAC。
* **无注入:** 绝不向 `explorer.exe` 注入 DLL,也不 Hook `SHFileOperation`。
* **无残留:** 没有后台服务、托盘图标或残留的注册表垃圾。
* **低占用:** 空闲时 CPU 占用几乎为零(后台守护进程以 100次/秒 的频率轮询焦点/热键,占用约 0.01%)。内存占用约为 30–50MB RAM(这是保持 Tauri/WebView2 仪表盘引擎预热以实现即时粘贴响应所必需的)。
## ✦ 产品定位
BetterCopy 在文件传输生态系统中占据了一个独特的最佳平衡点,弥合了原始命令行性能与无缝原生消费者可用性之间的差距:
| 维度 | 标准 Windows 复制 | CLI 工具 (Robocopy / Rsync) | Shell 替代品 (TeraCopy / FastCopy) | BetterCopy |
| :--- | :--- | :--- | :--- | :--- |
| **速度(小文件)** | 🐌 慢(顺序 I/O) | ⚡ 快(并行化) | ⚡ 快(并行化) | ⚡ **快(并行化)** |
| **界面** | 原生且无缝 | 仅限 CLI(Shell/脚本) | 笨重的自定义 GUI / 覆盖层 | **临时仪表盘(自动关闭)** |
| **触发方式** | `Ctrl+V` / `Shift+Delete` | 手动调用命令 | 覆盖标准复制处理程序 | **`Ctrl+Shift+V` / `Ctrl+Shift+Delete`(受焦点限制)** |
| **系统残留** | 无(内置) | 无 | 系统服务及注册表钩子 | **无(无需管理员权限,零残留)** |
| **安全占用** | 无 | 无 | DLL 注入 / Shell 钩子(触发杀软报警) | **无(使用安全的原生 Win32 与 COM API)** |
| **配置** | 零配置 | 复杂的标志(`/MT`、`/J`、`/E`) | 手动调整缓冲区与缓存大小 | **零配置(基于 IOCTL 的自动调优)** |
## ✦ 工作原理
Windows 文件资源管理器按顺序逐个复制文件。第三方工具要么要求你使用它们自己笨拙的文件管理器,要么向 Windows Shell 注入危险的钩子。BetterCopy 提供了第三种方式:
1. **受焦点限制的触发器:** 一个轻量级的纯消息 Win32 窗口注册全局热键(粘贴为 `Ctrl+Shift+V`,删除为 `Ctrl+Shift+Delete`)。
2. **上下文限制:** 它监听原生的 Windows 焦点事件(`SetWinEventHook`),以确保热键仅在 Windows 文件资源管理器(`CabinetWClass`)或桌面处于前台时才激活。如果你正在重命名文件或专注于其他应用程序,按键将自然穿透传递。
3. **COM 路径与选择解析:** 触发时,它通过 COM API(`IShellWindows` ➔ `IFolderView2`)查询活跃的资源管理器窗口,以准确找到光标焦点所在位置:
* **对于复制/移动:** 它从剪贴板(`CF_HDROP`)读取源文件,并开始复制到解析出的目标位置。
* **对于删除:** 它通过 COM(`GetSelection`)查询当前选中的项目,将其映射到文件系统路径,并进行并行删除。
4. **自动调优引擎:** 它使用 Win32 存储 IOCTL 查询物理存储结构:
* **NVMe SSD:** 自动提升线程并发数(默认 16 个线程)以最大化队列深度。
* **HDD:** 安全地回退到单线程顺序复制,以防止磁头抖动。
* **USB 存储设备:** 检测现代 UASP 与传统 BOT 协议,动态优化 I/O。
5. **双队列架构:** 独立的工作池并发处理小文件(<1MB)和大文件(>=1MB),防止庞大的顺序文件使小文件处于饥饿状态。
## ✦ 性能(夹心结构基准测试)
我们使用对称夹心测试结构(用于暴露 SSD 写放大噪音并消除文件缓存漂移)和 **10 万个小文件测试夹具(总计 800MB)**,将 BetterCopy 与微软行业标准的 `robocopy` 进行了基准测试对比。
| 复制引擎 | 命令 / 选项 | 平均时间(秒) | 相比最佳 Robocopy 的加速比 |
| :--- | :--- | :--- | :--- |
| **BetterCopy (`bcopy`)** | 默认(自动调优) | **20.19s** | **快 1.65 倍**(基准) |
| **Robocopy** | `/MT:32`(多线程) | 33.29s | 1.00x |
| **Robocopy** | `/MT:32 /J`(无缓冲) | 35.80s | 0.93x |
| **Windows 文件资源管理器** | 禁用 Defender(手动) | 240s - 300s (4分 - 5分) | 0.11x - 0.14x(慢 8 倍 - 9 倍) |
*在 NVMe 驱动器上复制小文件时,BetterCopy 相比最快可能的 Robocopy 配置实现了 **64.9% 的吞吐量提升**,并且比原生 Windows 文件资源管理器(禁用 Defender 的情况下)快 **12 到 15 倍**。*
## ✦ 架构
```
[ Ctrl+Shift+V Global Hotkey ]
│
( Gated Focus Check )
/ \
Active in Explorer? Focused elsewhere?
/ \
[ COM Path Resolution ] [ Pass-through Key ]
│
[ Auto-Tune Storage Profile ]
(Query IOCTL Seek Penalty/UASP)
/ \
Spinning Disk? Internal NVMe / SSD?
/ \
[ 1 Thread (Sequential) ] [ Dual Queues (16 Threads) ]
├── Small Files (<1MB)
└── Large Files (>=1MB) (Unbuffered I/O)
```
## ✦ 用法
### 全局热键(复制/粘贴)
1. 启动 BetterCopy 守护进程(`better_copy_gui.exe`)。
2. 转到 Windows 文件资源管理器或桌面。
3. 复制一个或多个文件夹(`Ctrl+C`)。
4. 导航到目标目录,然后按下 **`Ctrl+Shift+V`**。
5. 一个精美的临时 Tauri 进度仪表盘将显示执行计划、速度和实时并发状态。
### 全局热键(删除)
1. 启动 BetterCopy 守护进程(`better_copy_gui.exe`)。
2. 转到 Windows 文件资源管理器或桌面。
3. 选择一个或多个文件/文件夹。
4. 按下 **`Ctrl+Shift+Delete`**。
5. Tauri 仪表盘将弹出,显示临时的删除进度条、删除速率(以 文件/秒 为单位)以及实时的 Canvas 速度图表。
### 命令行界面(`bcopy`)
适用于脚本编写、自动化或 CLI 优先的工作流:
```
# 使用自动调整的 parallel engine 将源复制到目标
bcopy.exe copy "C:\source\path" "D:\dest\path"
# 安全地将源移动到目标(复制、验证、删除)
bcopy.exe move "C:\source\path" "D:\dest\path"
```
## ✦ 从源码构建
### 前置条件
* [Rust](https://www.rust-lang.org/)(Stable 渠道)
* [适用于 Visual Studio 的 C++ 生成工具](https://visualstudio.microsoft.com/visual-cpp-build-tools/)(会自动安装 MSVC 编译器和 Windows SDK)
### 逐步构建
1. 克隆仓库:
git clone https://github.com/articulite/BetterCopy.git
cd BetterCopy
2. 同时构建 CLI 和 GUI 可执行文件:
cargo build --release
编译完成后,你将在工作区输出目录中找到独立且便携的可执行文件:
* **GUI 应用程序:** `target/release/better_copy_gui.exe`
* **CLI 引擎:** `target/release/bcopy.exe`
## ✦ 常见问题解答
#### 问:为什么仪表盘在复制开始前会显示加载动画?
**答:** BetterCopy 在按下热键后立即打开进度窗口,以提供即时的视觉反馈。在开始复制或删除之前,引擎会执行快速的后台目录遍历和预检(检查磁盘空间、权限和文件夹循环),以确保不会在操作中途失败,并将文件分类到最佳的小/大文件队列中。
#### 问:为什么 `Ctrl+Shift+V` 有时没有反应?
**答:** BetterCopy 使用焦点限制机制。该热键仅在 Windows 文件资源管理器或桌面处于活跃状态时触发。如果你正在重命名文件或聚焦于其他应用程序,按键将自然穿透传递。
#### 问:它支持网络驱动器 / UNC 路径吗?
**答:** 是的。BetterCopy 支持 网络驱动器/UNC 驱动器。引擎会自动检测远程驱动器,并安全地将并发限制在较低的线程数(2 个线程),以防止网络拥塞。(注意:OneDrive 或 Google Drive 等云同步文件夹未受官方支持)。
## ✦ 许可证
本项目基于 MIT 许可证授权。详情请参阅 [LICENSE](LICENSE) 文件。
## ✦ 路线图与待办事项
### 核心复制引擎
- [x] **受焦点限制的全局热键(`Ctrl+Shift+V`)** — 仅当标准 Windows 文件资源管理器或桌面处于前台时激活。
- [x] **受焦点限制的全局热键(`Ctrl+Shift+Delete`)** — 在 Windows 文件资源管理器或桌面中对选中项目进行高性能并行删除。
- [x] **重命名保护** — 在编辑文件名时自然穿透传递按键。
- [x] **上下文路径与选择解析** — 通过 COM API、剪贴板 `CF_HDROP` 或 Shell 选择列表动态查询活跃的资源管理器。
- [x] **存储性能分析与自动调优** — 通过 Win32 存储 IOCTL 检测 HDD 还是 SSD(寻道惩罚)以及 UASP 还是 BOT USB,以自动选择最佳的线程并发数。
- [x] **路径与循环保护** — 绕过 `MAX_PATH`(使用 `\\?\` 前缀)并跳过重解析点(符号链接/联接点)。
- [x] **双队列架构** — 为小文件(<1MB)和大文件(>=1MB)设置独立的工作池,以防止饥饿现象。
- [x] **直接 I/O 与低开销复制** — 采用“单句柄规则”实现,结合选择性预分配和缓存的元数据写入。
- [x] **无缓冲 I/O** — 绕过大文件的系统文件缓存。
- [x] **两阶段移动** — 安全的类事务移动(复制-验证-删除)以及同卷重命名优化。
- [x] **预检安全措施** — 执行空间检查、UNC 拒绝、写入探测和自复制检测。
- [x] **防止休眠** — 使用 Win32 执行状态管理在复制过程中阻止系统待机。
- [x] **任务取消** — 安全的终止触发器,可回滚部分目标文件。
- [ ] **运行时暂停与恢复** — 支持暂停和恢复活跃的复制进程。
- [ ] **设备断开恢复力** — 当外部驱动器断开连接时自动暂停并轮询/重试。
- [ ] **UAC 提权提示** — 在写入权限失败时提供权限提升选项。
### GUI 与用户体验
- [x] **Tauri 集成** — 具有系统托盘和单实例锁的独立后台应用程序。
- [x] **临时进度仪表盘** — 无边框、居中的窗口,显示队列详情、速度(MB/s)、预计剩余时间(ETA)和任务栏进度状态。
- [x] **Windows 美学** — 采用 Windows Mica/Acrylic 透明模糊特效的现代界面风格。
- [x] **自动隐藏/关闭** — 所有任务完成后自动关闭窗口。
- [ ] **复制/移动暂停** — 在 GUI 中暂停/恢复复制操作的前端按钮。
- [ ] **详细错误日志查看器** — 在 UI 中提供详细的失败报告。
### 打包与基准测试
- [x] **对称基准测试套件** — PowerShell 测试夹具生成器和测试框架。
- [ ] **MSI 安装程序包** — 专业的安装程序创建。
标签:Linux, Rust, Tauri, 可视化界面, 文件操作, 桌面工具, 系统增强, 网络流量审计, 通知系统