Escribir archivos en el dispositivo WPD a través de MTP C # / VB.net
Pregunta
Me gustaría escribir una aplicación que copie archivos MP3 a un SanDisk Sansa M240. El SanDisk no tiene una letra de unidad y utiliza MTP para la transferencia de archivos. Me topé con la muestra de conexión al dispositivo en: http: //blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx
pero una vez conectado, no puedo entender cómo copiar realmente archivos / crear carpetas en el dispositivo.
Estoy muy sorprendido de que no haya ningún contenedor .Net para esta biblioteca COM.
Solución
Parece que dimeby8 publicó algún código que maneja las transferencias de datos. Consulte otras publicaciones en su blog, especialmente:
Envío de comandos MTP a través de WPD parte 1
Otros consejos
Para transferir archivos a través de MTP con c #:
-
Descargue este paquete NuGet: PortableDevices
-
Agregue referencias a estas 4 bibliotecas COM:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
-
Tome los dll bajo
obj \ Debug
y colóquelos enbin \ Debug
:- Interop.PortableDeviceClassExtension.dll
- Interop.PortableDeviceConnectApiLib.dll
- Interop.PortableDeviceTypesLib.dll
- Interop.PortableDeviceApiLib.dll
Ahora puede usar la siguiente función para enumerar todos los dispositivos, aunque FriendlyName
no parece funcionar (devuelve una cadena vacía):
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;
}
El siguiente paso es obtener el contenido del dispositivo, que se hace así:
var contents = device.GetContents();