Запись файлов на устройство WPD через MTP C # / VB.net - PullRequest
11 голосов
/ 06 ноября 2008

Я хотел бы написать приложение, которое будет копировать файлы MP3 на SanDisk Sansa M240. SanDisk не имеет буквы диска и использует MTP для передачи файлов. Я наткнулся на образец подключения к устройству по адресу: http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx

но после подключения я не могу понять, как на самом деле копировать файлы / создавать папки на устройстве.

Я очень удивлен, что для этой библиотеки COM нет .Net-оболочек.

Ответы [ 2 ]

4 голосов
/ 31 декабря 2008

Похоже, что dimeby8 опубликовал некоторый код, который обрабатывает передачу данных. Посмотрите другие посты в его блоге, особенно:

Отправка команд MTP через WPD part 1

Отправка команд MTP через WPD part 2

Отправка команд MTP через WPD part 3

3 голосов
/ 02 октября 2016

Для передачи файлов через MTP с помощью c #:

  1. Загрузите этот пакет NuGet: PortableDevices

  2. Добавить ссылки на эти 4 библиотеки COM:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  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();
...