Domanda

Vorrei scrivere un'applicazione che copierà i file MP3 su un SanDisk Sansa M240. SanDisk non ha una lettera di unità e utilizza MTP per il trasferimento di file. Mi sono imbattuto nell'esempio di connessione al dispositivo all'indirizzo: http: //blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx

ma una volta connesso non riesco a capire come copiare effettivamente i file / creare cartelle sul dispositivo.

Sono molto sorpreso che non ci siano wrapper .Net per questa libreria COM.

È stato utile?

Soluzione

Sembra che dimeby8 abbia pubblicato del codice che gestisce i trasferimenti di dati. Controlla altri post nel suo blog, in particolare:

Invio di comandi MTP tramite WPD parte 1

Invio di comandi MTP tramite WPD parte 2

Invio di comandi MTP tramite WPD parte 3

Altri suggerimenti

Per trasferire file tramite MTP con c #:

  1. Scarica questo pacchetto NuGet: PortableDevices

  2. Aggiungi riferimenti a queste 4 librerie COM:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. Prendi le DLL sotto obj \ Debug e inseriscile in bin \ Debug :

    • Interop.PortableDeviceClassExtension.dll
    • Interop.PortableDeviceConnectApiLib.dll
    • Interop.PortableDeviceTypesLib.dll
    • Interop.PortableDeviceApiLib.dll

Ora puoi usare la seguente funzione per elencare tutti i dispositivi, sebbene FriendlyName non sembra funzionare (restituisce una stringa vuota):

    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;
    }

Il prossimo passo è ottenere i contenuti dal dispositivo, che è fatto così:

var contents = device.GetContents();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top