# 智能快速拷贝工具 **Repository Path**: dsguang/FastCopy ## Basic Information - **Project Name**: 智能快速拷贝工具 - **Description**: 高速文件拷贝工具 - 智能SSD/HDD检测 多线程引擎 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-27 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FastCopy 高速文件拷贝工具 - 智能SSD/HDD检测,扫描-拷贝管线多线程引擎,Windows 11 现代界面 ## 功能特性 - **智能磁盘检测** - 自动识别SSD/HDD,动态调整最优线程数(SSD↔SSD 16线程,混合4线程,HDD↔HDD 2线程) - **扫描-拷贝管线** - 先起 worker 再扫描,边扫边拷,大目录不再有漫长的"扫描等待期" - **多线程并行引擎** - 生产者-消费者任务队列 + 信号量分发,充分利用磁盘吞吐 - **原子覆盖** - 先拷贝临时文件再整体替换,中途中断不再毁掉目标已有文件 - **增量拷贝** - 同名且大小、修改时间一致的文件自动跳过,重复备份只拷有变化的部分 - **长路径支持** - 引擎全面 `\\?\` 前缀化,突破 260 字符路径限制,实测 347 字符深链 - **单文件/目录/整盘拷贝** - 支持选择单个文件、目录或整个磁盘作为源 - **文件夹到盘符根目录** - 自动创建同名文件夹(`C:\Folder` → `D:\` 会拷贝到 `D:\Folder\`) - **移动模式** - 同卷直接改名毫秒级完成,跨卷自动退回拷贝+删除源 - **拷贝后校验** - 可选逐字节对比校验,确保数据完整性,校验中同样可取消 - **覆盖/跳过/询问** - 三种冲突策略;询问模式覆盖前弹窗,一次选择全程生效 - **空间预检** - 拷贝前检查目标盘剩余空间,不足提前中止并明确提示 - **占用自动重试** - 文件被占用(SHARING_VIOLATION)时延迟退避重试 - **智能文件排除** - 默认排除 `*.tmp` `*.log` `*.chk` `pagefile.sys` `hiberfil.sys` `swapfile.sys` 及 `$RECYCLE.BIN` `System Volume Information`,支持自定义通配符规则;自动跳过 junction/reparse point,防止扫描环失控 - **命令行支持** - `FastCopy.exe /src C:\xxx /dst D:\xxx /move`,方便脚本调用 - **右键菜单集成** - 文件/文件夹右键"FastCopy 拷贝到..."、"FastCopy 移动到..." - **中途取消** - 拷贝/校验过程中可随时取消,大文件不再卡死 - **实时日志 + 错误明细** - UTF-16 日志记录拷贝/跳过/错误/校验失败详情;一旦出现错误,自动单独生成 `*_errors.log` 错误明细文件,完成提示中给出路径 - **Windows 11 风格界面** - Mica背景、扁平卡片、柔和蓝色配色、微软雅黑字体 - **窗口自适应缩放** - 支持拖拽放大,还原后恢复默认尺寸 ## 界面预览 ``` ┌─ FastCopy ──────────────────────────────────────┐ │ FastCopy │ │ 高速文件拷贝工具 │ │ │ │ 源路径 [________________________] [浏览] [选盘] │ │ 目标路径 [________________________] [浏览] [选盘] │ │ ──────────────────────────────────────────────── │ │ ☑ 拷贝后校验 ☑ 移动(拷贝后删除源) ☑ 增量(相同跳过)│ │ ○ 覆盖已有 ○ 跳过已有 ○ 询问 │ │ 线程 [16 ▾] [排除规则...] 日志 [...] │ │ ──────────────────────────────────────────────── │ │ ████████████████████░░░░░ 78% │ │ 78% | 文件: 1234 / 1580 | 目录: 89 | 已跳过: 42 │ │ 245.6 MB/s ← copying: bigfile.iso │ │ │ │ [开始拷贝] [取消] [关于] │ └──────────────────────────────────────────────────┘ ``` ## 下载 从平台 Release 页面下载最新版,无需安装,解压即用: - **[AtomGit Release](https://atomgit.com/dsguang/FastCopy/releases)**(主发布渠道) - **[Gitee Release](https://gitee.com/dsguang/FastCopy/releases)** 当前最新版 **v1.3.0**(2026-10-16):`FastCopy.exe`,x64 单文件约 413KB。 仓库根目录附带: | 文件 | 说明 | |------|------| | `FastCopy.exe` | 主程序(Release 页下载) | | `install.bat` | 右键菜单安装(需管理员权限) | | `uninstall.bat` | 右键菜单卸载 | | `LICENSE` | MIT 许可证 | ## 编译 ### 方式一:直接编译(推荐) 安装 [MSYS2](https://www.msys2.org/) 后执行: ```bash pacman -S mingw-w64-ucrt-x86_64-gcc ``` 然后运行 `build.bat`,或手动编译: ```bash windres src/resource.rc --codepage=65001 -O coff -o build/resource.o gcc -O2 -Wall -municode -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0601 \ src/main.c src/gui.c src/copy_engine.c src/disk_detect.c build/resource.o \ -I src -lcomctl32 -lcomdlg32 -lshell32 -lole32 \ -lkernel32 -luser32 -lgdi32 -ladvapi32 -ldwmapi -lmsimg32 \ -mwindows -o FastCopy.exe ``` ### 方式二:CMake ```bash mkdir build && cd build cmake .. -G "MinGW Makefiles" cmake --build . --config Release ``` ## 使用 ### 图形界面 1. 双击 `FastCopy.exe` 运行 2. 选择源路径(点击"浏览"选文件/目录,"选盘"选整个磁盘) 3. 选择目标路径 4. 可选:勾选"移动(拷贝后删除源)"、"增量(相同跳过)"、"拷贝后校验",选择覆盖/跳过/询问策略,调整线程数、排除规则、日志路径 5. 点击"开始拷贝" 6. 完成后如有错误,提示框会给出 `*_errors.log` 错误明细文件的完整路径 ### 命令行 ```bash # 拷贝目录 FastCopy.exe /src C:\MyFolder /dst D:\Backup # 移动文件(拷贝后删除源) FastCopy.exe /src C:\MyFolder /dst D:\Backup /move # 只指定源路径,打开GUI选择目标 FastCopy.exe /src C:\MyFolder ``` ### 右键菜单 ```bash # 安装右键菜单(需管理员权限) install.bat # 卸载右键菜单 uninstall.bat ``` 安装后,文件夹/文件右键会出现"FastCopy 拷贝到..."和"FastCopy 移动到..."。 ## 项目结构 ``` src/ ├── main.c # 程序入口、命令行参数解析 ├── gui.c / gui.h # Win32 GUI 界面、Mica背景、自绘控件、询问回调 ├── copy_engine.c / .h # 扫描-拷贝管线引擎、任务队列、原子覆盖、增量、长路径 ├── disk_detect.c / .h # SSD/HDD 检测 ├── resource.rc # 对话框资源定义 ├── app.manifest # Win11 兼容性清单 ├── gen_icon.c # 图标生成工具 └── fastcopy.ico # 应用图标 (16/32/48/256) tests/ └── lp_smoke.c # 长路径端到端冒烟测试(347 字符深链拷贝+增量+校验) ``` ## 技术细节 | 模块 | 实现 | |------|------| | 磁盘检测 | TRIM属性 → SeekPenalty → NVMe总线类型,三级探测 | | 线程调度 | SSD↔SSD=16, 混合=4, HDD↔HDD=2 | | 扫描-拷贝 | WorkQueue 生产者-消费者管线:先起 worker 再扫描,信号量唤醒,边扫边拷 | | 文件拷贝 | `CopyFileExW`,临时文件 + `MoveFileExW` 原子替换,中断不毁旧文件 | | 冲突策略 | 覆盖/跳过/询问三模式;增量按大小+mtime 判定自动跳过 | | 移动模式 | 同卷 `MoveFileExW` 直接改名;跨卷拷贝后递归删除源 | | 长路径 | 引擎 Win32 调用全面 `\\?\` 前缀化,实测 347 字符深链,理论上限 32K | | 取消支持 | `CopyFileExW` 进度回调返回 `PROGRESS_CANCEL`,校验阶段同样响应 | | 文件排除 | 通配符匹配(`*` `?`)大小写不敏感;目录名和相对路径双重匹配 | | 空间预检 | `GetDiskFreeSpaceExW` 对比总拷贝量,不足提前中止 | | 占用重试 | `ERROR_SHARING_VIOLATION` 延迟退避重试约 3 次 | | 数据校验 | worker 线程级复用读缓冲(VirtualAlloc),逐字节比对 | | 日志输出 | 线程安全 UTF-16 + BOM;64KB 批量缓冲刷盘;错误自动另存 `*_errors.log` | | 窗口缩放 | `DeferWindowPos` 批量更新,基于实际客户区尺寸计算 | | 界面风格 | Mica背景、扁平卡片、自绘按钮/进度条、悬停高亮 | ## 版本历史 - **v1.3.0**(2026-10-16)- 扫描-拷贝管线、原子覆盖、增量拷贝、长路径支持、错误明细日志、同卷移动改名、真实询问模式、空间预检、占用重试。[完整对比](https://gitee.com/dsguang/FastCopy/compare/v1.2.2...v1.3.0) - **v1.2.2**(2026-10-13)- 移动模式异步删除、预计算目标路径、扫描批量 flush - 更早版本见各平台 Release 页面 ## 作者 - 作者:阿光哥 - 邮箱:dsguang@outlook.com - 版本:1.3.0 ## 许可 MIT License