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.

Était-ce utile?

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

Envoi de commandes MTP via WPD partie 2

Envoi de commandes MTP via WPD partie 3

Autres conseils

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

  1. Téléchargez ce package NuGet: PortableDevices

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

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. Prenez les DLL sous obj \ Debug et placez-les dans bin \ 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top