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

     2023-02-16     234

关键词:

【中文标题】Windows 资源管理器在哪里存储文件元数据?【英文标题】:Where does windows explorer store file meta data? 【发布时间】:2011-08-30 03:13:55 【问题描述】:

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

【问题讨论】:

会不会和this有关? 不,正如我所说,因为它也适用于 FAT,所以不能涉及备用数据流,因为 FAT 不支持它们 在 FAT 和 NTFS 上,它们都可以使用扩展属性 (en.wikipedia.org/wiki/Extended_file_attributes) 【参考方案1】:

从 Windows Vista 开始,metadata 现在存储在文件本身中。

【讨论】:

当然它只适用于某些文件类型。例如,它永远不会适用于文本文件!【参考方案2】:

Windows 将其存储在 COM Structured storage 中。实现要么在文件本身(Office 文档支持这一点,或任何支持结构化存储的文件格式),要么在 NTFS 本身。

API 可在此处获得:Structured Storage。有趣的函数是StgOpenStorageEx。

以下是有关 NTFS 实施的一些详细信息:IPropertySetStorage-NTFS File System Implementation

【讨论】:

COM 结构化存储是一个较旧的 API。可以通过IShellItem2IPropertyStore 访问OP 询问的资源管理器中显示的属性(标题、评级-> 认为媒体文件)。这与 COM 结构化存储不同。【参考方案3】:

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

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

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

属性通过 API 公开给程序员。 (见下文。)

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

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

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

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

我发现的最有用的文档是Ben Karas' blog entries around the time of the Vista release starting in August 2006。他已经完成了关于财产系统的整个系列。这是一个非常有用的教程,对于使用 Windows 7 的我来说,它已经 100% 有效。

不要按照本页其他回复中给出的建议来阅读COM 结构化存储。这仅适用于特定的文件类型。在words of Ben Karas:

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

【讨论】:

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

由于您询问的是 .Net,因此您可以使用 nuget 中的 Microsoft.WindowsAPICodePack-Shell 库访问文件属性。它为Windows Properties 提供了一个.Net 接口。

该库的使用示例如下:

using System;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
using Microsoft.WindowsAPICodePack.Shell;

namespace Properties

    public class PictureFileProperties
    
        public string GetCamera(string filename)
        
            if (!System.IO.File.Exists(filename))
                return null;

            ShellObject picture = ShellObject.FromParsingName(filename);
            if (picture != null)
            
                var manufacturer = picture.Properties.GetProperty(SystemProperties.System.Photo.CameraManufacturer)).Value;
                var model = picture.Properties.GetProperty(SystemProperties.System.Photo.CameraModel).Value;
                return string.Format("0 1", manufacturer, model);
            

            return null;
         
   

【讨论】:

黑盒导出器在哪里存储探测数据?

】黑盒导出器在哪里存储探测数据?【英文标题】:Wheredoesblackboxexporterstoreprobedata?【发布时间】:2021-01-1702:00:18【问题描述】:我想通过卷挂载存储blackbox-exporter探测数据,以便当blackbox容器因任何原因重新启动时,以前的探测... 查看详情

sqlserver配置管理器在哪里找的?

...台程序的一个管理单元而不是单独的程序,所以,当运行Windows10时,SQLServer配置管理器不显示为一个应用程序。要打开SQLServer配置管理器,请在“搜索”超级按钮中的“应用程序”下,键入SQLServerManager11.msc(对于SQLServer2012)或S... 查看详情

ubuntu资源管理器在哪里打开

...e中安装的ubuntu12.04系统,但是本人是小白,找不到系统的资源管理器在哪里。求各位大侠帮助默认的管理器是:nautilus。补充:1打开pdf文件evincexxx.pdf如果想打开pdf后后台运行,可用:evincexxx.pdf&2命令起别名在~/.bashrc中,vim~/.bas... 查看详情

IIS Express 配置/元数据库文件在哪里找到?

】IISExpress配置/元数据库文件在哪里找到?【英文标题】:WhereistheIISExpressconfiguration/metabasefilefound?【发布时间】:2012-10-0810:17:15【问题描述】:在哪里可以找到IISExpress配置/元数据库文件?【问题讨论】:【参考方案1】:配置文... 查看详情

inode 存储在哪里?

】inode存储在哪里?【英文标题】:Whereareinodesstoredat?【发布时间】:2016-10-2200:23:41【问题描述】:我最近开始学习Linux内核,我刚刚了解了inode,它是包含文件元数据的数据结构。现在,操作系统如何找到文件的关联inode?(假... 查看详情

将 PWA 应用程序数据存储在 OneDrive 上的哪里,用户无法访问?

...03:05【问题描述】:我想编写一个PWA应用程序(在Android和Windows10上运行)处理用户在OneDrive上的文件和照片。我需要存储一些元数据,并且我更喜欢用户无法访问的元数据。我有什么选择 查看详情

为啥 Windows 任务管理器在写入非常大的文件时显示内存增加?我应该担心吗? [关闭]

】为啥Windows任务管理器在写入非常大的文件时显示内存增加?我应该担心吗?[关闭]【英文标题】:WhydoesWindowstaskmanagershowmemoryincreaseswhilewritingverylargefiles?ShouldIbeworried?[closed]为什么Windows任务管理器在写入非常大的文件时显示内... 查看详情

对象存储元数据

...主要是描述数据属性(property)的信息,用来?支持如指示存储位置、历史数据、资源查找、文件记录等功能。EOS元数据有两种元数据:系统元数据和用户定义的元数据。对于Bucket中的每个对象,EOS都会保存该Object的系统元数据。... 查看详情

lustre组件介绍

Lustre组件管理服务器——MGS存储集群中所有lustre文件系统的配置信息,并将消息传给其他lustre组件元数据服务器——MDSMDS使存储在一个或多个MDT中的元数据可提供Lustre客户端使用1、管理文件系统并发2、管理容量平衡3、身份管理... 查看详情

kettle资源库-元数据

...据”ETL的元数据:描述ETL要执行的任务在Kettle里元数据的存储方式:资源库资源库包括文件资源库、数据库资源库Kettle4.0以后资源库类型可以插件扩展XML文件。ktr转换文件的XML的根节点必须是 查看详情

知识点:什么是元数据?(metadata)?

...在系统中有一个节点专门司职元数据管理,所有元数据都存储在该节点的存储设备上。所有客户端对文件的请求前,都要先对该元数据管理器请求元数据。分布式管理是指将元数据存放在系统的任意节点并且能动态的迁移。对元... 查看详情

wsl2 中的文件物理存储在哪里? [关闭]

...定文件的实际存储位置。请注意,我并不是说我想在文件资源管理器中浏览它们-我知道可以通过在资源管理器中输入\\\\wsl$\\来完成。如果我不得不猜测,我会说文件存储 查看详情

将 API 密钥放在哪里?清单中的资源、元数据还是静态变量? [复制]

】将API密钥放在哪里?清单中的资源、元数据还是静态变量?[复制]【英文标题】:WheretoputtheAPIkey?Resources,Meta-datainManifestorstaticvariable?[duplicate]【发布时间】:2015-05-0121:52:33【问题描述】:我正在尝试找出将API密钥添加到我的Andro... 查看详情

从不完整的视频文件中提取元数据

...描述】:谁能告诉我元数据以常见的视频文件格式存储在哪里?如果它位于文件的开头,或者分散在整个文件中。我正在使用包含大量视频文件的远程对象存储,我想从这些文件中提取元数据,特别是视频时长和视频尺寸,而不... 查看详情

使用元掩码扩展的 chrome 文件中的私钥和事务存储在哪里

】使用元掩码扩展的chrome文件中的私钥和事务存储在哪里【英文标题】:whereistheprivatekeyandtransationstoreinchromefileusingmetamaskextension【发布时间】:2019-03-0507:01:47【问题描述】:我想知道使用元掩码扩展的googlechrome文件中的私钥和交... 查看详情

文件管理

...为两个区  1.元数据区     用来存储文件的元数据信息 文件名称,大小,时间,节点编号,数据区地址  2.数据区      用来存储文件的真正的数据  3.配额大小& 查看详情

hdfs---namenode管理元数据及ha模式

...间的关系,即某一个特定文件都有哪些Block;2-每一个Block存储在什么位置(DataNode上面); NameNode如何保证元数据的可靠性fsimage和内存中保存的元数据互为镜像;edits.log中存储了一段时间内所有的元数据操作;edits.log文件大... 查看详情

云存储(代码片段)

根据提供给用户的存储结构进行归类,云存储可分为“非可管理型云存储“与”可管理型云存储“非可管理性呈现一个可以立即使用的磁盘驱动器,面向普通用户;限定了存储容量和使用方式使用成本低,操作简单可管理型则需... 查看详情