通过MTP C#/ VB.net将文件写入WPD设备

时间:2008-11-06 00:03:33

标签: .net usb wpd

我想编写一个将MP3文件复制到SanDisk Sansa M240的应用程序。 SanDisk没有驱动器号并使用MTP进行文件传输。 我偶然发现了连接到设备的示例:http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx

但是一旦连接,我就无法弄清楚如何在设备上实际复制文件/创建文件夹。

我很惊讶这个COM库没有任何.Net包装器。

2 个答案:

答案 0 :(得分:4)

看起来像dimeby8发布了一些处理数据传输的代码。查看他博客中的其他帖子,特别是:

Sending MTP commands through WPD part 1

Sending MTP commands through WPD part 2

Sending MTP commands through WPD part 3

答案 1 :(得分:3)

使用c#:

通过MTP传输文件
  1. 下载此NuGet包:PortableDevices

  2. 添加对这4个COM库的引用:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. 将{d}放在obj\Debug下并将其放入bin\Debug

    • Interop.PortableDeviceClassExtension.dll
    • Interop.PortableDeviceConnectApiLib.dll
    • Interop.PortableDeviceTypesLib.dll
    • Interop.PortableDeviceApiLib.dll
  4. 现在您可以使用以下函数列出所有设备,虽然FriendlyName似乎不起作用(它返回一个空字符串):

        private IDictionary<string, string> GetDeviceIds()
        {
            var deviceIds = new Dictionary<string, string>();
            var devices = new PortableDeviceCollection();
            devices.Refresh();
            foreach (var device in devices)
            {
                device.Connect();
                deviceIds.Add(device.FriendlyName, device.DeviceId);
                Console.WriteLine(@"DeviceId: {0}, FriendlyName: {1}", device.DeviceId, device.FriendlyName);
                device.Disconnect();
            }
            return deviceIds;
        }
    

    下一步是从设备获取内容,如下所示:

    var contents = device.GetContents();