2008-11-06 19 views
11

Tôi muốn viết một ứng dụng sẽ sao chép các tập tin MP3 sang SanDisk Sansa M240. SanDisk không có ký tự ổ đĩa và sử dụng MTP để truyền tệp. Tôi tình cờ gặp mẫu kết nối với thiết bị tại: http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspxGhi tập tin vào thiết bị WPD qua MTP C#/VB.net

nhưng một khi đã kết nối, tôi không thể tìm ra cách sao chép tệp/tạo thư mục trên thiết bị.

Tôi rất ngạc nhiên khi không có bất kỳ trình bao bọc Net nào cho thư viện COM này.

Trả lời

3

Để chuyển các tập tin thông qua MTP với C#:

  1. Tải gói NuGet này: PortableDevices

  2. Thêm tham chiếu đến các thư viện 4 COM:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. Lấy của dll dưới obj\Debug và đặt chúng vào bin\Debug:

    • Interop.PortableDeviceClassExtension.dll
    • Interop.PortableDeviceConnectApiLib.dll
    • Interop.PortableDeviceTypesLib.dll
    • Interop.PortableDeviceApiLib.dll

Bây giờ bạn có thể sử dụng chức năng sau đây để liệt kê tất cả các thiết bị, mặc dù FriendlyName dường như không làm việc (nó sẽ trả về một chuỗi rỗng):

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

Bước tiếp theo là nhận được các nội dung từ các thiết bị, được thực hiện như sau:

var contents = device.GetContents(); 
Các vấn đề liên quan