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

时间:2016-05-28 15:27:14

标签: python file-io go attributes metadata

我正在编写程序并需要一些指导。基本上,我试图确定文件是否附加了一些标记或标记。类似于HTTP标头的属性。

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

我的问题是:我应该在哪里存放这个标志/标记?文件是否具有类似于HTTP标头的系统?我不想访问或操作文件的内容,只是文件的某种属性,可以在不破坏实际文件的情况下进行编辑 - 而且它必须在文件类型中相当普遍,因为我的潜在领域是文件类型未绑定。我有一些Web API的经验,所以我熟悉HTTP Headers和json。 Windows中的本地文件是否存在类似的系统?我对那些拥有程序员在尝试存储元数据时使用的常用技术的专业/行业知识的人特别感兴趣。在文件中以便以后访问它们。或者,如果有人知道在哪里指出我,因为我不确定我应该研究什么。

为了记录,我将使用Golang或Python为Windows编写程序。我要操作的文件可能是所有常见文件(.docx,.txt,.pdf等)

先谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

请参阅,如果您只需要标记文档,您可能希望使用创建时间,该时间将在本文档的实时内(直到被复制)保持不变,以存储您的标记。 :d

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

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

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

Mac OS本身可能支持某些元数据,但我并非百分百确定。

在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.

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

当您正常打开文件时,只有主流对应用程序可见。应用程序必须检查其他流是否存在,并选择他们想要遵循的流。

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

但是,如果所有流都被采取了怎么办?

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

想象一下,病毒会将其副本写入另一个已经存在的程序流中。

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

令人讨厌的伎俩!因此,当此功能开始被滥用时,防病毒软件开始限制具有多个流的文件,因此就好像这个功能不存在。

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

告诉你什么? 不要将元数据添加到文件,组织单独的文件,或将数据索引到与您引用的文件同名的特殊文件中以及同一文件夹中。

答案 1 :(得分:1)

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

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

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

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