Windows资源管理器在哪里存储文件元数据?

cod*_*nix 10 .net explorer winapi metadata windows-7

在Windows 7中,我可以将元数据添加到文件中,例如标题,评级等.这个元数据存储在哪里?对于NTFS,他们可能会使用备用数据流,但我这个元数据也恰好在FAT32中工作,那么他们怎么做呢?是否有API可以使用此功能?

Lum*_*umi 5

在 Windows 7 中,我可以[使用资源管理器]向文件添加元数据,例如标题、评级等。这些元数据到底存储在哪里?

该元数据称为属性。从 Windows Vista 开始就以这种方式提供。

Windows 资源管理器以统一的方式显示属性,这可能会让您误以为它们都来自同一家商店。但这种情况并非如此。

属性通过 API 暴露给程序员。(见下文。)

它们的确切存储位置是实现细节。这取决于文件类型和属性类型。例如,文件系统时间戳作为属性公开。媒体文件元数据(例如图像的 EXIF 或 MP3 的 ID3 标签)存储在文件本身中。还有其他元数据可能存储在与您正在检查其属性的文件一起的 XML 文件中。

那么它存储在哪里呢?答案是:这确实要看情况,你真的不必担心,也不应该担心。因为,正如我所说,这是一个实现细节,就编程而言,担心实现细节意味着绕过 API。

在 API 级别处理属性时,您也不必担心属性存储在哪里。请参阅IShellItem2IPropertyStoreCOM 接口以获取入口点。

在底层,Windows Vista 和更高版本提供了了解文件类型以及如何读写其属性的属性处理程序。您可以编写自己的属性处理程序(使用 COM)并将其添加到资源管理器(作为所谓的shell 扩展)。

我发现的最有用的文档是Ben Karas 在 2006 年 8 月 Vista 发布前后的博客文章。他完成了关于财产系统的整个系列。这是一个非常有用的教程,对于我使用 Windows 7 来说,它的效果 100%。

不要按照本页另一个回复中给出的建议来阅读有关COM 结构化存储的信息。这仅适用于特定文件类型。用本·卡拉斯的话来说:

问题:很多人错误地调用了StgOpenStorageEx. 不要那样做! StgOpenStorageEx仅支持特定格式例如 OLE 复合文档或 NTFS 辅助流存储。 StgOpenStorageEx不知道如何从.JPG图像中读取 EXIF 标头。

  • 如果我想知道迁移到 Linux 后我的标签是否可用怎么办?我应该花时间通过 Windows 的内置属性系统添加元数据还是寻找第 3 方解决方案?如果您正在考虑维护存档,那么了解数据的存储位置非常重要。 (3认同)
  • -1表示“这确实取决于情况,你真的不必担心,也不应该担心。” 当其他人做了一些非常愚蠢的事情,然后把它放在你的桌子上时,了解幕后发生的事情有助于调试。 (2认同)