Pergunta

Eu gostaria de escrever um aplicativo que copie arquivos MP3 para um Sandisk Sansa M240. O Sandisk não possui uma letra de unidade e usa o MTP para transferência de arquivo. Eu tropecei na amostra de conectar -se ao dispositivo em: http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx

Mas, uma vez conectado, não consigo descobrir como copiar arquivos / criar pastas no dispositivo.

Estou muito surpreso que não haja nenhum invólucro .NET para esta biblioteca COM.

Foi útil?

Solução

Parece que o Dimeby8 postou algum código que lida com transferências de dados. Verifique outras postagens em seu blog, especialmente:

Enviando comandos MTP através da WPD Parte 1

Enviando comandos MTP através do WPD Parte 2

Enviando comandos MTP através da WPD Parte 3

Outras dicas

Para transferir arquivos através do MTP com C#:

  1. Baixe este pacote Nuget: Dispositivos portáteis

  2. Adicione referências a essas 4 bibliotecas com:

    • PortableDeviceclassextension
    • PortableDeviceConnectapi
    • PortableDevicetypes
    • PortableDeviceApi
  3. Pegue a DLL's Under obj\Debug e colocá -los em bin\Debug:

    • Interrop.portabledEviceclassextension.dll
    • Interrop.portabledEviceConnectApilib.dll
    • Interrop.portabledEvicetySlib.dll
    • Interrop.portabledEviceApilib.dll

Agora você pode usar a seguinte função para listar todos os dispositivos, embora FriendlyName não parece estar funcionando (ele retorna uma string vazia):

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

O próximo passo é obter o conteúdo do dispositivo, o que é feito assim:

var contents = device.GetContents();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top