windows通过explore向安卓传输文件失败
1. 问题描述
现象:通过 USB(MTP)连接 Android 手机时,任何在 Windows 上新建或修改过的 txt(甚至空格、数字)或其它内容型文件,拖拽到手机都会“嘟”一声却不成功;而下载自网络、未打开过的同名文件可正常传输;改名后也可传输;空白 txt(0 字节)也可传输。
2. 关键排查步骤
2.1. 路径与权限排除
- 尝试拖到手机的 Download、Documents、自己建的 Packages 等多种目录,均失败。
- 拖入 apk、图片、视频等非文本文件正常。
2.2. 格式与编码排除
- 保证所有 txt 均为 UTF‑8(无论 BOM 与否),仍然不行。
- 将 txt 压缩为 zip,zip 也一样拖拽失败。
2.3. NTFS Zone.Identifier 流测试
Remove-Item -Path "C:\Users\xxx\Desktop\test.txt:Zone.Identifier" -Stream Zone.Identifier - 对网络下载的 txt 文件,Remove-Item 可删掉 Zone.Identifier;
- 对自己新建/修改的 txt,PowerShell 报“找不到 Zone.Identifier”,说明并无安全标记。
2.4. 反向验证
- adb push 完全绕过 MTP,直接写入,没有任何问题。
- 用微信、Send Anywhere、Snapdrop 等网络传输也都可行。
3. 原因分析
- 核心原因在于 Windows Explorer 对 MTP 拖拽的实现
- 修改后的文件在后台写入缓存尚未被 Explorer 完全 flush,于是拖拽时 MTP 接口读取到不完整或锁定的流,导致传输被悄无声息地丢弃。
- 重命名不触发内容流读取,下载的文件早已写盘完成,所以可以拖拽;空文件因无内容校验也能通过。
- 与手机安全策略无关:adb push 及网络传输均可正常写入,说明手机端对文件本身并无额外屏蔽。
4. 最终解决与结论
- 重启 Windows 资源管理器(在任务管理器中重新运行 explorer.exe)后,之前“卡住”的写入缓存被清理,MTP 拖拽恢复正常,一切文件均可顺利传输。
- 总结:问题源于 Windows Explorer 的 MTP 拖拽流程中,对刚改过的文件内容流未及时刷新或读取失败,手机端检测到不完整流后静默丢弃;重启 Explorer 相当于强制刷新了写入缓存和文件句柄,故而恢复正常。
最终结论:并非手机安全策略或文件属性限制,而是 Windows Explorer 在通过 MTP 拖拽已修改文件时的一个“缓存未刷盘”或“锁定句柄”小 bug,重启资源管理器即可彻底解决。