12

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

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

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

4

2 回答 2

5

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

通过 WPD 第 1 部分发送 MTP 命令

通过 WPD 第 2 部分发送 MTP 命令

通过 WPD 第 3 部分发送 MTP 命令

于 2008-12-31T15:37:11.357 回答
2

使用 C# 通过 MTP 传输文件:

  1. 下载此 NuGet 包:PortableDevices

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

    • 便携式设备类扩展
    • PortableDeviceConnectApi
    • 便携式设备类型
    • 便携设备接口
  3. 将dll放在下面obj\Debug并将它们放入bin\Debug

    • Interop.PortableDeviceClassExtension.dll
    • Interop.PortableDeviceConnectApiLib.dll
    • Interop.PortableDeviceTypesLib.dll
    • Interop.PortableDeviceApiLib.dll

现在您可以使用以下函数列出所有设备,尽管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();
于 2016-10-02T15:07:46.743 回答