Write Files to WPD device via MTP C#/VB.net
Solution 1
It looks like dimeby8 posted some code that handles data transfers. Check other posts in his blog, especially:
Sending MTP commands through WPD part 1
Sending MTP commands through WPD part 2
Sending MTP commands through WPD part 3
Solution 2
To transfer files through MTP with c#:
Download this NuGet package: PortableDevices
-
Add references to these 4 COM libraries:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
-
Take the dll's under
obj\Debug
and put them intobin\Debug
:- Interop.PortableDeviceClassExtension.dll
- Interop.PortableDeviceConnectApiLib.dll
- Interop.PortableDeviceTypesLib.dll
- Interop.PortableDeviceApiLib.dll
Now you can use the following function to list all devices, although FriendlyName
does not seem to be working (it returns an empty string):
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;
}
The next step is getting the contents from the device, which is done like so:
var contents = device.GetContents();
Comments
-
Matt almost 2 years
I would like to write an application that will copy MP3 files to a SanDisk Sansa M240. The SanDisk doesn't have a drive letter and uses MTP for file transfer. I stumbled through the sample of connecting to the device at : http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx
but once connected, I can't figure out how to actually copy files / create folders on the device.
I am very surprised that there aren't any .Net wrappers for this COM library.