Schreiben von Dateien auf WPD Gerät über MTP C # / VB.net
Frage
Ich möchte eine Anwendung schreiben, die MP3-Dateien auf eine SanDisk Sansa M240 kopiert. Die SanDisk hat keinen Laufwerkbuchstaben und verwendet MTP für die Dateiübertragung. I gestoßen durch die Probe auf die Vorrichtung zum Verbinden unter: http: //blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx
aber einmal angeschlossen ist, kann ich nicht herausfinden, wie man tatsächlich das Kopieren von Dateien / Ordner erstellen auf dem Gerät.
Ich bin sehr überrascht, dass es keine .Net Wrapper für diese COM-Bibliothek.
Lösung
Es sieht aus wie dimeby8 einige Code geschrieben, die Datenübertragungen abwickelt. Überprüfen Sie die anderen Beiträge in seinem Blog, vor allem:
Senden von MTP-Befehle über WPD Teil 1
Andere Tipps
Zur Übertragung von Dateien durch MTP mit c #:
-
herunterladen NuGet Paket: PortableDevices
-
Verweise auf diese 4 COM-Bibliotheken hinzufügen:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
-
Nehmen Sie die DLL unter
obj\Debug
und steckt sie inbin\Debug
:- Interop.PortableDeviceClassExtension.dll
- Interop.PortableDeviceConnectApiLib.dll
- Interop.PortableDeviceTypesLib.dll
- Interop.PortableDeviceApiLib.dll
Jetzt können Sie die folgende Funktion verwenden, um alle Geräte aufzulisten, obwohl FriendlyName
nicht zu funktionieren scheint (es gibt einen leeren 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;
}
Der nächste Schritt ist immer den Inhalt von dem Gerät, das wie getan wird:
var contents = device.GetContents();