Запись файлов на устройство WPD через MTP C #/VB.net

StackOverflow https://stackoverflow.com/questions/267222

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

  1. Загрузите этот пакет NuGet: Портативные устройства

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

    • Переносимое устройство для расширения
    • PortableDeviceConnectApi Переносное устройство connectapi
    • Переносимые типы устройств
    • PortableDeviceApi - портативное устройство
  3. Возьмите библиотеку dll в разделе obj\Debug и положите их в bin\Debug:

    • Взаимодействие.PortableDeviceClassExtension.dll
    • Взаимодействие.PortableDeviceConnectApiLib.dll
    • Взаимодействие.PortableDeviceTypesLib.dll
    • Взаимодействие.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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top