簡體   English   中英

WPD對象文件名在'。'處截斷

[英]WPD Object Filename Truncated at '.'

在我的項目中,我使用Windows便攜設備(WPD)API來枚舉移動設備的內容。 WPD API枚舉指南 我能夠枚舉每個對象並查看其屬性,如API編程指南中所示。 WPD API屬性指南

但是,當我嘗試獲取具有的對象的名稱時. 在名稱中,返回的值將被截斷.

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對象中的某些內容嗎? 我很困惑。

編輯:所以我使用WPD API示例軟件來檢索com.example對象的所有對象屬性,您可以看到WPD本身無法獲取完整的文件夾名稱。 在此輸入圖像描述

謝謝你的時間!

WPD應用程序編程參考指的是以下3個名稱。

WPD_OBJECT_HINT_LOCATION_DISPLAY_NAME:一個更友好的名稱,主要用於顯示

WPD_OBJECT_NAME:設備上對象的名稱。

WPD_OBJECT_ORIGINAL_FILE_NAME:設備上對象的原始文件名。

C ++中的MS代碼示例使用WPD_OBJECT_ORIGINAL_FILE_NAME來獲取實際文件名(在對象下面),同時將文件從設備傳輸到PC。

我修改了MS代碼示例(枚舉對象屬性),它向我展示了實際的文件名(沒有從文件名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版本,連接類型(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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM