2008-11-06 2 views
11

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

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

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

ответ

3

Для передачи файлов через 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(); 
Смежные вопросы