Запись файлов на устройство WPD через MTP C #/VB.net
Вопрос
Я хотел бы написать приложение, которое будет копировать MP3-файлы на SanDisk Sansa M240.SanDisk не имеет буквы диска и использует MTP для передачи файлов.Я наткнулся на пример подключения к устройству по адресу : http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx
но после подключения я не могу понять, как на самом деле копировать файлы / создавать папки на устройстве.
Я очень удивлен, что для этой COM-библиотеки нет никаких .Сетевых оболочек.
Решение
Похоже, что dimeby8 опубликовал некоторый код, который обрабатывает передачу данных. Посмотрите другие посты в его блоге, особенно:
Отправка команд MTP через WPD часть 1
Другие советы
Для передачи файлов через MTP с помощью c#:
Загрузите этот пакет NuGet: Портативные устройства
Добавьте ссылки на эти 4 COM-библиотеки:
- Переносимое устройство для расширения
- PortableDeviceConnectApi Переносное устройство connectapi
- Переносимые типы устройств
- PortableDeviceApi - портативное устройство
Возьмите библиотеку 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();