为什么我没有得到 mtp 设备上对象的 WPD_OBJECT_ORIGINAL_FILE_NAME(即文件名)

Why am I not getting the WPD_OBJECT_ORIGINAL_FILE_NAME(i.e the filename) of the object on mtp device

我在 windows 服务中使用 WPD(windows 便携式设备)API,将文件从 mtp 设备上的文件夹传输到我硬盘上的指定文件夹.

出于测试目的,我在 mtp 设备上的文件夹下创建了 xyzdata.txt 文件。 因此,当代码到达执行此操作的位置时:

    hr = content->Properties(&properties);
    if (SUCCEEDED(hr))
    {
        hr = GetStringValue(properties.Get(),
             selection,
             WPD_OBJECT_ORIGINAL_FILE_NAME,
             &originalFileName);
    }

'hr' 填充了 "ERROR_BUSY" 并且根本没有设置 originalFileName。 某些对象可能未设置 WPD_OBJECT_ORIGINAL_FILE_NAME 的原因是什么,还是检索数据有问题?

任何帮助都将是无价的。如果您需要更多代码,我将 post 放在这里。

编辑:

错误代码是,

hr = HRESULT_FROM_WIN32(ERROR_BUSY) : 请求的资源正在使用中

此外,该设备是 android 设备。有时当我们插入 USB 电缆时,文件名可用。但这种情况很少见。请让我知道发生了什么

找到解决方案。

问题是在我调用 GetStringValue() 之前 GetStream() 调用没有完成。

因为 GetStringValue() 函数调用对 GetStream() 没有任何依赖性,我只是重新排序它们,瞧,一切都开始工作了。