WPD 对象文件名在“.”处被截断

WPD Object Filename Truncated at '.'

在我的项目中,我使用 Windows 便携式设备 (WPD) API 来枚举移动设备的内容。 WPD API Enumeration Guide. I'm able to enumerate over each object and view their properties as shown in the API programming guide. WPD API Properties Guide

但是,当我尝试获取名称中包含 . 的对象名称时,返回值在 .

处被截断
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 Application Programming Reference 指的是以下 3 个名字。

WPD_OBJECT_HINT_LOCATION_DISPLAY_NAME: A friendlier name, mostly intended for display

WPD_OBJECT_NAME: The name of the object on device.

WPD_OBJECT_ORIGINAL_FILE_NAME: The original filename of the object on device.

C++ 中的 MS 代码示例在将文件从设备传输到 PC 时使用 WPD_OBJECT_ORIGINAL_FILE_NAME 获取实际文件名(在对象下方)。

我修改了 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
}