【问题标题】:Why am I not getting the WPD_OBJECT_ORIGINAL_FILE_NAME(i.e the filename) of the object on mtp device为什么我没有得到 mtp 设备上对象的 WPD_OBJECT_ORIGINAL_FILE_NAME(即文件名)
【发布时间】:2015-12-15 13:04:46
【问题描述】:

我在我的 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 的原因,或者它是检索数据的问题?

任何帮助都将是无价的。如果您需要更多代码,我将在此处发布。

编辑:

错误码是,

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

另外,该设备是安卓设备。有时当我们将 USB 电缆插回时,文件名可用。但这种情况很少见。请告诉我发生了什么

【问题讨论】:

    标签: winapi windows-services mtp wpd


    【解决方案1】:

    找到了解决办法。

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

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

    【讨论】:

    • MTP 非常脆弱,而且本质上是令人难以置信的顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2021-03-29
    • 2017-11-21
    相关资源
    最近更新 更多