MTP协议问题:如何获得一个指定路径下的文件的ID

jungleau 2015-12-14 11:17:23
加精
本人需要一个简单的程序把一个指定文件从PC传输到Android设备(通过USB,使用MTP模式连接到PC)。找了半天只在MSDN上找到一个C++版的文件传输示例程序:

程序说明:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd389001(v=vs.85).aspx

源码下载:
https://code.msdn.microsoft.com/windowsdesktop/Portable-Devices-COM-API-fd4a5f7d/sourcecode?fileId=42893&pathId=223013526

C++就C++吧,也可以凑合拿来用,大不了做成一个DLL。但是现在遇到一个问题:
如何能够直接获得一个指定路径的ID? 比如说我现在想传输文件到

计算机\MI 4LTE\内存设备\Download

我就需要先获得这个Download目录的ID,然后才能对其操作。我在这个示例代码,只看到通过一个父对象ID,如何列举其全部的子对象的方法。所以需要一层层往下找。第一层是DEVICE,其只有一个子对象s10001. 然后我再列举s10001的子对象,发现Download目录的ID是o8. 拿到这个o8,我就可以对他写文件了。但是这种方法,是不是效率太低?有没有直接的办法可以拿到某个路径的ID,不必一层一层子目录去寻找?

另外,我发现当目标目录下已经有重名的文件时,这个文件传输的方法不能实现直接覆盖,必须先删除重名文件,然后才能成功传输。这个有没有比较快捷的办法?

最后,哪位老大如能提供可用的C#代码进行MTP传输的,不胜感激。 我自己找了很久,发现网上的C#代码没有一个能用的。而自己尝试把C++的示例改成C#,在使用DeviceManager.GetDevices列举所有可用设备那一步就已经过不去了,死活都要报“封送拆收器限制: 字符串过长。”的错误。

先多谢!
...全文
3060 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
您好,请问您找到解决的方法了吗?
ArcRain 2015-12-22
  • 打赏
  • 举报
回复
以前只搞过基于WPD接口的C++版本文件读取,对于文件路径的获取,只有枚举这个办法,比较快捷的方法之一,就是先枚举文件夹类型的item并把ID保存下来,下次使用时可以打开设备后,直接通过这个ID定位到文件夹,再枚举其下的文件(C++版本相关接口:https://msdn.microsoft.com/en-us/library/windows/desktop/dd388537(v=vs.85).aspx)。 WPD支持自动化对象的编程,你可以试着添加WPD的COM组件看看C#能不能引用进来,这样就可以直接像使用脚本那样使用其对象了,具体可以参考:https://msdn.microsoft.com/en-us/library/windows/desktop/dd388998(v=vs.85).aspx。不过这种方法我以前没试过,只是从COM组件的使用来看,理论上也许可行。 其他更多资料,只能熟读MSDN了,这是最好的手册。
qq_25146963 2015-12-22
  • 打赏
  • 举报
回复
我 觉得我觉得还是使用LinQ来排序比较合适
qq_25146963 2015-12-22
  • 打赏
  • 举报
回复
我觉得还是使用LinQ来排序比较合适
qq_25146963 2015-12-22
  • 打赏
  • 举报
回复
我觉得还是使用LinQ来排序比较合适
jungleau 2015-12-17
  • 打赏
  • 举报
回复
汗,这个东西没有人会吗
jungleau 2015-12-15
  • 打赏
  • 举报
回复
顶一下,做过mtp协议文件传输的大虾们,请指教

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧