Écrire des fichiers sur un périphérique WPD via MTP C # / VB.net
Question
Je voudrais écrire une application permettant de copier des fichiers MP3 sur un SanDisk Sansa M240. Le SanDisk n'a pas de lettre de lecteur et utilise le protocole MTP pour le transfert de fichiers. Je suis tombé par hasard sur l'exemple de connexion au périphérique à l'adresse: http: //blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx
mais une fois connecté, je ne sais pas comment copier des fichiers / créer des dossiers sur le périphérique.
Je suis très surpris qu'il n'y ait pas de wrappers .Net pour cette bibliothèque COM.
La solution
On dirait que dimeby8 a posté du code qui gère les transferts de données. Consultez les autres articles de son blog, notamment:
Envoi de commandes MTP via WPD partie 1
Autres conseils
Pour transférer des fichiers via MTP avec c #:
-
Téléchargez ce package NuGet: PortableDevices
-
Ajoutez des références à ces 4 bibliothèques COM:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
-
Prenez les DLL sous
obj \ Debug
et placez-les dansbin \ Debug
:- Interop.PortableDeviceClassExtension.dll
- Interop.PortableDeviceConnectApiLib.dll
- Interop.PortableDeviceTypesLib.dll
- Interop.PortableDeviceApiLib.dll
Vous pouvez maintenant utiliser la fonction suivante pour répertorier tous les périphériques, bien que FriendlyName
ne semble pas fonctionner (il renvoie une chaîne vide):
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;
}
L'étape suivante consiste à récupérer le contenu de l'appareil, comme suit:
var contents = device.GetContents();