已知文件夹

Windows Vista 引入了新的存储方案和新的用户配置文件命名空间。 为了解决这些新因素,已替换旧系统,即通过 CSIDL 值引用标准文件夹。 从 Windows Vista 起,这些文件夹由一组名为“已知文件夹 ID”的新 GUID 值引用。

已知文件夹系统具有以下优势:

  • 独立软件供应商 (ISV) 可以使用自己的已知文件夹 ID 集进行扩展。 他们可以定义文件夹、为其提供 ID,并将这些文件夹注册到系统。 无法扩展 CSIDL 值。
  • 可以枚举系统上的所有已知文件夹。 没有 API 为 CSIDL 值提供此功能。 有关详细信息 ,请参阅 IKnownFolderManager::GetFolderIds
  • ISV 添加的已知文件夹可以添加自定义属性,以便说明其用途和预期用途。
  • 许多已知文件夹可以重定向到新位置,包括网络位置。 在 CSIDL 系统下,只能重定向 “我的文档” 文件夹。
  • 已知文件夹可以具有自定义处理程序,以便在创建或删除期间使用。

为了兼容,仍支持使用 CSIDL 值的 CSIDL 系统和 API。 但是,不建议在任何新开发中使用它们。

以下主题讨论已知文件夹系统的具体内容。

以下参考页介绍了 Win32 已知文件夹函数,这些函数可用于检索已知文件夹的位置或将其重定向到新位置。 这些函数替换了较旧的 Win32 函数。 提供新函数的目的是为旧函数提供等效的行为,但组件对象模型 (COM) API 也会复制每个新函数。

新建函数 取代 COM 等效项
SHGetKnownFolderPath SHGetFolderPath IKnownFolder::GetPath
SHGetKnownFolderIDList SHGetFolderLocation IKnownFolder::GetIDList
SHSetKnownFolderPath SHSetFolderPath IKnownFolder::SetPath

 

以下参考页介绍了 COM 已知文件夹 API,这些 API 提供上面列出的 Win32 API 的所有功能,并添加了枚举所有已知文件夹、访问已知文件夹属性和扩展已知文件夹的标准集的功能。

Windows 软件开发工具包 (SDK) 中包含一个演示已知文件夹 API 的 C++ 示例。 在计算机上安装 Windows SDK 后,可以在 %ProgramFiles%\Microsoft SDKs\Windows\v6.0\Samples\WinUI\Shell\AppPlatform\KnownFolders 下找到该示例。

已知文件夹示例