【发布时间】:2020-10-16 11:12:51
【问题描述】:
IFileOperation 相当于什么
SHFILEOPSTRUCTW op = {hDlg, FO_COPY, directoryFrom, directoryTo, 0, FALSE, NULL, NULL};
int status = SHFileOperationW(&op);
directoryFrom 是相对于我的工作目录的目录路径,directoryTo 是绝对路径?
- 我可以直接将我的绝对路径传递给
SHCreateItemFromParsingName以获得IShellItem吗?什么是解析名称和显示名称? - 如果
SHCreateItemFromParsingName适用于绝对路径,我应该将它与GetFullPathNameW结合使用来解析相对路径还是有更简单的替代方法?
我发现关于这些主题的文档可能会更好。
【问题讨论】:
-
IFileOperation适用于IShellItem接口。您不能单独为相对路径创建IShellItem,只能为绝对路径创建。通过使用GetCurrentDirectory()或等效项然后将您的相对路径附加到它来创建绝对路径并不难。否则,您可以先为您的工作目录获取一个IShellItem,然后使用SHCreateItemFromRelativeName()为相对于工作目录的路径创建一个IShellItem。但实际上,您不应该一开始就依赖工作目录。始终使用绝对路径。 -
外壳项并不总是对应于物理文件。因此需要支持虚拟项目的 IFileDialog。 Shell Item 的解析名称在父 Shell 文件夹中应该是唯一的,用于获取 IShellItem。显示名称仅用于显示并且可以是不明确的(两个项目在给定的外壳文件夹中可以具有相同的显示名称)。对于物理文件或文件夹,解析和显示名称是相同的。 SHCreateItemFromParsingName 适用于物理文件和文件夹的绝对路径。
-
@RemyLebeau 我也考虑过使用
SHCreateItemFromRelativeName,感谢您确认它应该可以工作。虽然我也许可以取消工作目录来解决我当前的问题,但我仍然认为工作目录是无价的并且可以简化很多事情——尽管在我看来它们可能不应该改变。 -
@SimonMourier 这可以解释为什么
SHCreateItemFromParsingName可能使用显示名称,但官方文档通过指定它仅使用使其不必要地混淆显示名称没有任何解释。尽管如此,我还是不太了解物理和非物理文件和文件夹之间的区别,以及它们如何与解析和显示名称交互。我是否正确假设物理文件或文件夹将是文件系统中实际存在的文件或文件夹?SHCreateItemFromParsingName是否不适用于不存在的路径? -
如果你能详细解释这些路径和名称以及它们与 shelll 项目和
SHCreateItem...函数的关系,我会接受这个答案,因为这是我最挣扎的一点.
标签: winapi com windows-shell