MTP协议问题:如何获得一个指定路径下的文件的ID
本人需要一个简单的程序把一个指定文件从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列举所有可用设备那一步就已经过不去了,死活都要报“封送拆收器限制: 字符串过长。”的错误。
先多谢!