本地文件类似于 HTTP Headers 的属性系统

Attribute system similar to HTTP Headers for local files

我正在编写程序,需要一些指导。本质上,我试图确定文件是否附加了一些标记或标志。有点像 HTTP Header.

的属性

如果存在这样的标记,将以某种方式对该文件进行操作(移动到另一个目录)。

我的问题是:

我应该将这个 flag/marker 存储在哪里?文件是否具有类似于 HTTP Headers 的系统?我不想访问或操作文件的内容,只是可以在不破坏实际文件的情况下编辑的某种 属性 文件——而且它必须在文件类型中相当通用,因为我的潜力文件类型的域是未绑定的。我有一些使用 Web API 的经验,所以我熟悉 HTTP Headers 和 json。 windows 中的本地文件是否存在任何类似的系统?我对任何了解程序员在尝试将 'meta data' 存储在文件中以便以后访问它们时使用的常用技术的 professional/industry 知识的人特别感兴趣。或者,如果有人知道指向我的位置,因为我不确定我应该研究什么。

郑重声明,我打算为 Windows 编写一个程序,可能使用 Golang 或 Python。我要操作的文件可能都是常见的文件(.docx、.txt、.pdf 等)

如果您要处理 docx 和 pdf 等二进制文件,最好将元数据存储在单独的文件或 sqlite 文件中。

元数据通常与文件分开存储在称为 inode 的数据结构中(至少在 Unix 系统中,Windows 可能有类似的东西)。但您可能不想深入兔子洞。

如果您的目标是基于元数据查询系统,那么使用 SQLite 会更容易、更高效。在文件中包含元数据意味着您需要打开文件,将其从磁盘读入内存,然后检查元数据——即较慢的查询。

如果您不需要基于元数据进行查询,那么将元数据存储在文件中可能是有意义的。它会减少应用程序中的依赖性,但为了通过 Word 或 Adob​​e Reader 访问文件的内容,您需要在将元数据传递给应用程序之前去除元数据。不值得麻烦,通常

您希望添加的元数据最好保存在单独的文件或所有文件的数据库中。

或者在另一个具有相同名称和不同扩展名或前缀的文件中,您可以将其隐藏。

依赖文件系统非常棘手,您的数据将受到存储文件的文件系统的限制和功能的约束。 而且,您不能指望您的数据保持完好无损,因为任何应用程序都可能希望更改这些标志。

其中一些具有非常具体、明确定义的用途,例如创建时间、修改时间、访问时间...

看,如果您只需要标记文档,您可能希望使用创建时间,它在该文档的整个生命周期内(直到被复制)都将保持不变来存储您的标记。 :D

非常肮脏的生意,不专业,不可靠等等。

但这是一个解决方案。可怜的一个,但存在。

我不知道 FAT32 或 NTFS 文件系统支持任何额外的标记位,OS 已经使用的除外。 Unixes EXT 系列 FS 确实支持一些额外的位。甚至你应该小心,以防其他一些重要的应用程序将它们用于某些事情。

Mac OS 本身可能支持一些元数据,但我不是 100% 确定。

在 Windows 上,您还有一个选项可以将更多数据与文件相关联,但我也不会使用它。

嗯,NTFS 文件系统(FAT 不支持)有一个称为流的功能。

In essential, same file can have multiple data streams under itself. I.e. You have more than one file contents under same file node.

更清楚。同一个文件包含两个不同的文件。

当您正常打开文件时,应用程序只能看到主流。应用程序必须检查其他流是否存在并选择他们想要跟随的流。

因此,您可以选择将元数据存储在文件的第二个流下。

但是,如果所有流都被占用怎么办?

更重要的是,防病毒程序可能会阻止您出于偏执狂访问元数据,或者至少请求许可。 我不知道为什么 MS 包含该选项,可能是为了文件复制或其他原因,但坏黑客利用了这样一个事实,即您可以在现有的常规文件下存储一些数据,但没人知道。

想象一个病毒将其复制到另一个已经存在的程序流中。

它启动所需的一切,而不是你下次启动时的旧程序 运行 它是一个添加到任务计划程序的批处理脚本,可以翻转两个流,使病毒数据成为主要流。

恶作剧!所以当这个功能开始被滥用的时候,杀毒软件就开始限制多流文件了,就好像这个功能不存在一样。

如果您想使用 OS 的技术添加一些元数据,请使用 Windows 注册表, 但即使那样也是不明智的。

要告诉你什么? 不要将元数据添加到文件、组织单独的文件或在与您引用的文件同名且位于同一文件夹中的特殊文件中为您的数据编制索引。