【问题标题】:Acquire IPropertySetStorage for File in Recycle Bin为回收站中的文件获取 IPropertySetStorage
【发布时间】:2015-02-27 05:11:40
【问题描述】:

我正在尝试从文件(标题、作者等)中枚举文件属性,并发现在回收站中枚举文件尤其有问题。但是,在确定了我认为的问题后,我确信其他文件夹可能会出现相同的问题。

我发现通过 ILCreateFromPathParseDisplayName 等方法创建的 ITEMIDLISTs 会受到位于某些特殊文件夹中的 desktop.ini 的影响(见下文),这将导致 ITEMIDLIST在我用来获取文件的IPropertySetStorage 接口的BindToObject(或SHBindToObject)中使用时失败,我用它来枚举文件属性。

为了描述我所说的“受 desktop.ini 的影响”,我发现它返回的路径名称被 desktop.ini 更改,例如通过翻译桌面中的“LocalizedResourceName”。 ini 和ITEMIDLIST 中返回的路径不再与磁盘上的实际 路径一致。这会导致 Bind 方法以 HRESULT 0x80070002 失败。

根据我所做的调试和研究,我认为我的问题有两种可能的解决方案。但是,我目前不知道该怎么做,或者事实上是否有可能。这让我想到了这组问题:

1) 是否有可能通过某种不受文件夹中的 desktop.ini 影响的方法获得ITEMIDLIST

2) 有没有办法在不使用ITEMIDLIST 的情况下获得文件的IPropertySetStorage 接口?

或者,如果有人有更好的方法来获取有关文件的一般信息,我将不胜感激。

【问题讨论】:

    标签: c++ properties com windows-shell


    【解决方案1】:

    Windows 资源管理器的回收站中的文件也无法使用 shell 属性页,所以我猜答案是否定的。

    【讨论】:

    • 当我删除 desktop.ini 文件时,我能够完美地枚举出我寻找的数据,并且我可以明显地看到 ITEMIDLIST 中的变化以描绘实际的文件路径。请记住,物理文件本身在放入回收站时不会更改。数据仍然存在,只是 Explorer 本身选择了不同的显示方式(基于 desktop.ini-foo)。
    • 是的,但您是从具有 desktop.ini 的特殊资源管理器文件夹视图中询问 IPropertySetStorage。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多