Escreva arquivos no dispositivo WPD via mtp c#/vb.net
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.
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
Outras dicas
Para transferir arquivos através do MTP com C#:
Baixe este pacote Nuget: Dispositivos portáteis
Adicione referências a essas 4 bibliotecas com:
- PortableDeviceclassextension
- PortableDeviceConnectapi
- PortableDevicetypes
- PortableDeviceApi
Pegue a DLL's Under
obj\Debug
e colocá -los embin\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();