【发布时间】:2015-02-27 05:11:40
【问题描述】:
我正在尝试从文件(标题、作者等)中枚举文件属性,并发现在回收站中枚举文件尤其有问题。但是,在确定了我认为的问题后,我确信其他文件夹可能会出现相同的问题。
我发现通过 ILCreateFromPath 或 ParseDisplayName 等方法创建的 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