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.

¿Fue útil?

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

Envío de comandos MTP a través de WPD parte 2

Envío de comandos MTP a través de WPD parte 3

Otros consejos

Para transferir archivos a través de MTP con c #:

  1. Descargue este paquete NuGet: PortableDevices

  2. Agregue referencias a estas 4 bibliotecas COM:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. Tome los dll bajo obj \ Debug y colóquelos en bin \ 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top