2016-11-02 5 views
11

내 프로젝트에서 WPD (Windows 휴대용 장치) API를 사용하여 모바일 장치의 콘텐츠를 열거합니다. WPD API Enumeration Guide. API 프로그래밍 가이드에 표시된대로 각 개체를 열거하고 해당 속성을 볼 수 있습니다. 내가 이름 내에서 .을 가진 개체의 이름을 얻을 때 WPD API Properties GuideWPD 개체 파일 이름이 '.'에서 잘립니다.

그러나, 반환 된 값에 잘립니다 .

HRESULT hr = objectProperties->GetStringValue(WPD_OBJECT_NAME, &strOriginalFileName); 
if(FAILED(hr)) 
    return false; 

PWSTR wideStr = strOriginalFileName; 
char buffer[20]; 
wcstombs(buffer, wideStr, 20); 

qDebug() << buffer; 

있도록 예를 들어, 객체 (장치에서 폴더)와 com.example의 이름은 com으로 반환됩니다. 이것은 장치에서 특정 파일 경로를 찾으려고 할 때 명백한 문제가됩니다.

나는 무엇이 잘못되었는지 알 수 없습니다. 나는 파일 이름이 실제로 어떻게 오해하는지? example은 (는) com 개체의 다른 부동산 또는 무언가입니까? 나는 매우 혼란 스럽다.

EDIT : 그래서 WPD API 샘플 소프트웨어를 사용하여 com.example 개체의 모든 개체 속성을 검색하고 WPD 자체가 전체 폴더 이름을 가져올 수 없음을 알 수 있습니다. enter image description here

감사합니다.

답변

5

WPD Application Programming Reference에는 다음과 같은 3 개의 NAME이 나와 있습니다.

WPD_OBJECT_HINT_LOCATION_DISPLAY_NAME : 주로 디스플레이위한 친숙한 이름

WPD_OBJECT_NAME : 장치에서 객체의 이름.

WPD_OBJECT_ORIGINAL_FILE_NAME : 장치에있는 개체의 원래 파일 이름입니다.

는 C++에서 MS의 코드 샘플은 PC에 장치로부터 파일을 전송하는 동안 (오브젝트 아래) 실제 파일 이름으로 얻을 WPD_OBJECT_ORIGINAL_FILE_NAME을 이용한다.

나는 (개체 속성을 열거)를 MS 코드 샘플을 수정 그것은 나에게 내가 사용

Here is the image

(파일 이름 com.ef1.first.second에서 잘립니다 아무것도) 실제 파일 이름 보여 주었다 :

 
    Windows Windows 7 Ultimate (without SP1) 
    Visual Studio 2013 
    Android 4.4.4 (Moto-E) 
    Connection type: MTP 
    Memory type: Internal Memory as well as External (SD Card) 

Windows 버전, Windows SDK 버전, android ve의 일부 조합에서 작동하지 않는다면 놀랄 일이 아닙니다. 연결 유형 (MTP, PTP, USB 대용량 저장 장치).


다음은 내가 수정 한 코드의 일부입니다.

// Reads properties for the user specified object. 
void ReadContentProperties(_In_ IPortableDevice* device) 
{ 
    //.... Edited for brevity 
    tempHr = propertiesToRead->Add(WPD_OBJECT_NAME); 
    if (FAILED(tempHr)) 
    { 
     wprintf(L"! Failed to add WPD_OBJECT_NAME to IPortableDeviceKeyCollection, hr= 0x%lx\n", tempHr); 
    } 

    // Here is the added code 
    tempHr = propertiesToRead->Add(WPD_OBJECT_ORIGINAL_FILE_NAME); 
    if (FAILED(tempHr)) 
    { 
     wprintf(L"! Failed to add WPD_OBJECT_ORIGINAL_FILE_NAME to IPortableDeviceKeyCollection, hr= 0x%lx\n", tempHr); 
    } 
    //.... Edited for brevity 
} 
+0

WPD_OBJECT_ORIGINAL_FILE_NAME은 (는) 개체의 속성이 아닙니다. 첨부 된 스크린 샷에는 객체에 연결된 모든 속성이 표시됩니다. 며칠 동안 저 속성을 적용하려고 노력했습니다. 일부 파일에는 있지만 다른 파일에는 없습니다. (나는 믿는다).WPD_OBJECT_ORIGINAL_FILE_NAME을 (를) 잡으려 할 때마다 시간이 실패로 돌아옵니다. – mrg95

+0

필자는'WPD_OBJECT_ORIGINAL_FILE_NAME'을 필수로 생각했습니다. 기기에서 사용중인 파일 시스템을 알 수 있습니까? 그것은 좀 더 관련있는 정보를 암시 할 수 있습니다. – blackpen

+0

그냥 안드로이드 전화. OnePlus One은 정확하지만 다양한 휴대 전화/태블릿을 지원하려면 소프트웨어가 필요합니다. – mrg95

관련 문제