# 照片搬家 · Windows 试用版 0.4.1 一个简单的安卓照片和视频搬家工具:左边是手机,右边是电脑保存位置。 ## 安装与使用 1. 双击 `PhoneMover-Setup-0.4.1-universal.exe` 安装。支持 Windows 10/11 的 Intel/AMD 电脑,自动安装对应的 32 位或 64 位程序。安装包自带 .NET 运行环境,不需要管理员权限。也提供 x86(32 位)和 x64(64 位)独立包;Windows ARM 和 Mac 暂不支持。 2. 用支持数据传输的 USB 线连接安卓手机,解锁手机,USB 用途选择“文件传输 / Android Auto”。不要选“仅充电”或“传输照片”。 3. 连接后即可选择电脑或外接硬盘的保存文件夹并点击开始。近 30 天模式会边查找边保存,无需等待总数统计;只在手机模块显示已发现的数量与大小。开始按钮表示同意软件在保存和校验后分批清理对应原文件。 4. 选择“最大的 100 项”会提示读取耗时;确认并点击开始后,先读取全部照片和视频的大小,再搬最大的 100 项。它不能在排序完成前保证哪些是全手机最大的文件。 5. 可勾选继续搬家:时间模式继续边查找边搬更早的 30 天;大小模式每批搬剩余最大的 100 项。取消勾选会完成本批后停止;“停止搬家”会尽快停止后续操作。 手机相机目录中的内容单独分类,截图、下载和其他可访问媒体归为“其他图片视频”。不读取云端未下载内容或 Android 私有应用目录。日期优先使用设备提供的拍摄/创作时间,其次创建时间和修改时间;无法确定日期的文件只参与大小模式。 电脑按“设备 / 相机拍摄或其他图片视频 / 年月”归档。同名文件不覆盖。右边最多展示 200 个已有文件,正在搬的文件置顶。 ## 安全行为 - 每约 0.5 GB 或最多 32 个文件为一个小批次:先复制、写入磁盘并完整校验,再清理这一小批手机原件。单个超过 0.5 GB 的视频独立成批,不会在文件未传完时删除。边查找边搬运时进度条展示当前文件,已释放空间持续累计。 - 清理前再次完整读取手机原文件和电脑文件,核对 SHA-256 和文件身份。校验失败、不支持稳定文件标识、连接中断时不发起删除。 - 删除指定 WPD 文件对象,不删除整个目录。删除后重新读取目录确认结果。 - 只有确认删除成功才累计“已释放”,固定两位小数。不足 1 GB 显示 MB;MB 为百万字节,GB 为十亿字节,按原文件大小统计;手机系统的可用空间显示可能稍后刷新。 - 删除可能不进入手机回收站;电脑副本是搬家后的保存位置。搬家时请勿编辑源文件或移除目标磁盘。 - 第一次在某款手机上使用时,先用已另有备份的内容确认兼容性。当前版本尚未完成真实安卓手机的复制与删除验收,不能把自动化测试当成机型认证。 读取速度显示为 USB 实际读取速率,包括保存和清理前核对。设备等待、电脑校验时保留最近数值,并明确标注“最近读取速度”。缩略图从已保存的本地副本获取,不占用另一个手机连接。 ## 遇到问题 页面会说明问题并给出下一步,可直接点击“重新读取”“继续搬家”或“选择文件夹”。如果重试后仍然出现,点击“复制诊断信息”反馈即可,不需要看懂系统错误码。信息仅复制到剪贴板,不自动上传。 0.3.1 修复了桌面版读取功能启动时的“句柄无效”故障。故障说明与提示规范见 [documentation/errors-0.3.1.md](documentation/errors-0.3.1.md)。 ## 中断与结果 任务清单和每个文件的状态都会保存。发生中断后,连接同一手机、使用原保存位置,可点击“继续搬家”,先恢复已知文件与断点,再继续发现尚未读取的内容。在本次运行中观察到手机断开再重连时,会核对设备身份后自动继续;软件重启、主动停止或未检测到完整断开事件时,点击继续即可。 已完成的备份先重新校验,未完成文件保留专属 `.partial` 断点文件。续传前会比较断点已有内容与手机原件,之后追加剩余部分;当前 MTP 流不支持随机定位,因此这一步仍会经 USB 重读已有部分,不承诺省掉这一段的传输时间。重连导致临时对象 ID 变化时,必须核对稳定标识、手机、路径、大小和修改时间,才能恢复。 近 30 天的文件不一定排在手机目录的前面。软件仍需检查日期,找到符合范围的文件就开始保存;不会等整个手机扫描结束。每个文件夹先获取轻量的对象编号列表,结束目录枚举后才搬运,避免删除让目录游标跳项。 任何旧日志都不能单独授权删除。清理结果不明确时会暂停;恢复时先锁定并完整校验电脑备份,再完整读取手机目录确认上次结果,不会仅凭“找不到原件”就累计释放空间。原件仍在时,重新核对后才继续。恢复大文件时只按尚未写入部分检查所需磁盘空间。 “查看结果”打开详细报告。任务记录和报告位于 `%LOCALAPPDATA%\PhoneMover`,仅保存在电脑本地。卸载保留备份、任务记录和报告。 若“电脑已保存,手机未确认清理”,请先查看电脑副本,再重新读取手机。不要依据进度条自行批量删除手机目录。设备不提供封面时会显示文件类型图标;这不影响原始文件传输。系统驱动调用阻塞时,停止需要等该次调用返回。 ## 开发与构建 - .NET SDK 8.0、Inno Setup 6.7.3 或兼容版本。 - `./build.ps1 -Dotnet dotnet -Iscc 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe'` - 项目本地构建工具可通过 `-Dotnet ./.tools/dotnet/dotnet.exe -Iscc ./.tools/InnoSetup/ISCC.exe` 指定。 - `dotnet test tests/PhoneMover.Tests/PhoneMover.Tests.csproj -c Release` - 发布后的 `PhoneMover.exe --probe <输出.json>` 只读检查可发现设备,不连接或操作媒体。 - `PhoneMover.exe --ui-review <输出目录>` 渲染合成数据界面,仅用于视觉审查,不连接手机。 网站下载页位于 `web/`:显示可检测的当前系统与位数,默认推荐通用包,保留手动选择和 Mac“即将推出”入口。`node web/build.mjs` 会把真实安装包与校验值一起打包;`node web/preview.mjs` 可本地预览。已部署到 [个人网站下载页](https://8.160.165.84/photo-mover/),部署及回退说明见 `deploy/README.md`。 架构、安全约束和验证情况见 [documentation/architecture.md](documentation/architecture.md)。 应用没有账号、云上传、遥测、自动更新、后台开机自启或第三方网络服务。此试用包没有代码签名证书,Windows 可能显示“未知发布者”。