Scrivi file sul dispositivo WPD tramite MTP C # / VB.net
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.
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
Altri suggerimenti
Per trasferire file tramite MTP con c #:
-
Scarica questo pacchetto NuGet: PortableDevices
-
Aggiungi riferimenti a queste 4 librerie COM:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
-
Prendi le DLL sotto
obj \ Debug
e inseriscile inbin \ 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();