2013-08-05 2 views
2

Windows 휴대용 장치 (여기서는 삼성 Galaxy Note 2)의 특정 폴더에서 내 PC로 데이터를 전송하는 응용 프로그램을 작성하려고합니다.Windows 휴대용 장치에서 파일의 전체 이름 받기

모든 폴더와 파일을 성공적으로 나열 할 수 있으며 WPD-API를 통해 원하는 특정 폴더에 연결할 수 있습니다. this page의 도움으로

나는 가 여기에있는 장치에있는 모든 객체를 포함하고 그것에서 PortableDeviceObject을 생성 (이 자체 제작 클래스 및 API에 속하지 않는) "PortableDevice"라는 클래스를 썼다 래퍼 메서드의 예

private static PortableDeviceObject WrapObject(IPortableDeviceProperties properties, string objectId) 
     { 
      PortableDeviceApiLib.IPortableDeviceKeyCollection keys; 
      properties.GetSupportedProperties(objectId, out keys); 

      PortableDeviceApiLib.IPortableDeviceValues values; 
      properties.GetValues(objectId, keys, out values); 

      // Get the name of the object 
      string name; 
      var property = new PortableDeviceApiLib._tagpropertykey(); 
      property.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); 
      property.pid = 4; 
      values.GetStringValue(property, out name); 

      // Get the type of the object 
      Guid contentType; 
      property = new PortableDeviceApiLib._tagpropertykey(); 
      property.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); 
      property.pid = 7; 
      values.GetGuidValue(property, out contentType); 

      var folderType = new Guid(0x27E2E392, 0xA111, 0x48E0, 0xAB, 0x0C, 0xE1, 0x77, 0x05, 0xA0, 0x5F, 0x85); 
      var functionalType = new Guid(0x99ED0160, 0x17FF, 0x4C44, 0x9D, 0x98, 0x1D, 0x7A, 0x6F, 0x94, 0x19, 0x21);   

      if (contentType == folderType || contentType == functionalType) 
      { 
       return new PortableDeviceFolder(objectId, name); 
      } 

      return new PortableDeviceFile(objectId, name); 
     } 

name 속성에 액세스 할 때 나는 항상 현재 개체 (그림 또는 음악 파일 등)의 전체 이름을 얻을 것이라고 생각했을 것입니다. 그러나 그림 만 전체 이름 (예 : test_picture.jpeg)으로 표시되지만 폴더에서 PDF를 읽으면 .PDF 확장명이 아닌 PDF의 이름 만 인쇄됩니다. 폴더의 모든 파일을 반복하고 데이터 스트림을 가져 와서이 스트림을 PC의 새 파일로 채우기 때문에 문제가 있습니다. 지금까지는 작동하지만 그림을 제외한 모든 파일은 적절한 확장자없이 만들어 지므로 사용할 수 없거나 수동으로 이름을 변경해야합니다.

다음은 질문입니다. WPD의 폴더에있는 모든 파일의 전체 경로에 어떻게 액세스합니까?

난 그냥

property.pid = 12;//WPD_OBJECT_ORIGINAL_FILE_NAME 
values.GetStringValue(property, out name); 
return new PortableDeviceFile(objectId, name); 

return new PortableDeviceFile(objectId, name); 

을 대체했다 :

답변

관련 문제