문제

MP3 파일을 Sandisk Sansa M240에 복사하는 응용 프로그램을 작성하고 싶습니다. Sandisk에는 드라이브 문자가 없으며 파일 전송에 MTP를 사용합니다. 장치에 연결하는 샘플을 우연히 발견했습니다. http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx

그러나 일단 연결되면 실제로 장치에서 파일을 복사 / 폴더를 작성하는 방법을 알 수 없습니다.

이 COM 라이브러리에는 .NET 포장지가 없다는 것에 매우 놀랐습니다.

도움이 되었습니까?

해결책

DimeBy8이 데이터 전송을 처리하는 일부 코드를 게시 한 것 같습니다. 특히 블로그의 다른 게시물을 확인하십시오.

WPD 파트 1을 통해 MTP 명령을 전송합니다

WPD 파트 2를 통해 MTP 명령을 전송합니다

WPD 파트 3을 통해 MTP 명령을 전송합니다

다른 팁

C#과 함께 MTP를 통해 파일을 전송하려면 :

  1. 이 Nuget 패키지를 다운로드하십시오. portabledevices

  2. 이 4 개의 COM 라이브러리에 대한 참조를 추가하십시오.

    • portabledeviceclassextension
    • portabledeviceconnectapi
    • portabledevicetypes
    • portabledeviceapi
  3. DLL을 가져 가라 obj\Debug 그리고 그것들을 넣습니다 bin\Debug:

    • interop.portabledeviceclassextension.dll
    • interop.portabledeviceConnectapilib.dll
    • interop.portabledevicetypeslib.dll
    • interop.portabledeviceapilib.dll

이제 다음 기능을 사용하여 모든 장치를 나열 할 수 있습니다. FriendlyName 작동하지 않는 것 같습니다 (빈 문자열을 반환) :

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

다음 단계는 장치에서 내용을 가져 오는 것입니다.

var contents = device.GetContents();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top