2008-11-06 11 views
11

Je voudrais écrire une application qui va 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 l'exemple de connexion à l'appareil à: http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspxÉcrire des fichiers sur un périphérique WPD via MTP C#/VB.net

mais une fois connecté, je ne peux pas comprendre comment copier réellement des fichiers/créer des dossiers sur l'appareil.

Je suis très surpris qu'il n'y ait pas de wrappers .Net pour cette bibliothèque COM.

Répondre

3

Pour transférer des fichiers via MTP avec C#:

  1. Télécharger ce paquet NuGet: PortableDevices

  2. Ajouter des références à ces 4 bibliothèques COM:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. Prenez les dll sous obj\Debug et les mettre en bin\Debug:

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

Maintenant, vous pouvez utiliser la fonction suivante pour lister tous les périphériques, bien que FriendlyName ne semble pas être de travail (il retourne 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 est d'obtenir le contenu de l'appareil, qui se fait comme ceci:

var contents = device.GetContents();