2012-02-08 55 views
1

如何在C中创建文件头,以便在读取头时可以检测到文件类型?如何为自己的文件格式创建标题?

这样做的正确方法是什么?是否有任何标准要遵循?

我想为我的文件添加一个小标题,以便在读取标题时可以检测到文件类型。

更新(如果你没有帽子):

我想添加一个标题为我自己的文件格式(不是.c和.h文件中),使用C,我会使用C来读取文件,识别并处理它。

+1

咦?什么“文件类型”?你的意思是“这是一个文本文件”? – 2012-02-08 20:00:32

+0

我明白了!他问如何使用* C创建带有特殊标题的文件。这意味着......太广泛/不是问题/不具有建设性。 – 2012-02-08 20:06:58

+0

这是用于您的本地文件系统吗?这是Mac OS,对吧?在其他文件系统上,文件类型通常由文件扩展名决定。 – 2012-02-08 20:08:20

回答

4

您可以在文件的开头写入一些自定义数据,就像存储任何其他数据一样。

例如PGM format指定有存储在第一线图像和最大值的尺寸:

P2 
# Shows the word "FEEP" (example from Netpbm main page on PGM) 
24 7 
15 
... picture data continues from here 

没有标准,将指定使这种报头的,因为它是非常罕见的做这样的事情。在PGM图片的情况下,您不知道没有此标题的图片尺寸 - 您将读取12个字节,但您不知道它是图片3x4还是6x2 ...

请注意,这种自定义数据是某种你必须预期被存储在文件的开头你是读它。您可以为自己的文件制作自定义标题,但是请确保将要使用您的文件的人知道它。

+0

谢谢,你似乎是唯一一个了解我不清楚的问题的人。我知道自由在那里写任何我想要的标题,我想知道是否有任何标准的做法。 – jarryd 2012-02-08 20:25:38

+0

由于该标题与文件中的任何其他数据没有区别,因此没有制作文件标题的标准。 – LihO 2012-02-08 20:32:07

3

许多文件格式都以一个小的ASCII代码或可识别的数字开始,以便可以通过编辑器或十六进制编辑器打开时识别它。这些有时也被称为“幻数”或“文件签名”。例如:

  1. 第一个四个字节GIF文件的是GIF,随后是三个字母版本(87a89a)。

  2. 一个zip文件是PK(原ZIP文件的作者姓名缩写)

  3. 前六个字节苹果的二进制plist文件格式是bplist

有一个全面的前两个字节列表here。通常所遵循的是有关文件包含内容的信息,如目录,然后是实际数据。

编辑

这听起来像你后面是一个可变长度的头。可变长度标题通常以标题中的项目数开始,因此,例如,如果文件中有5个项目,则标题可能如下所示:

HELIUM3 
5 
Item1 INDEX 
Item2 INDEX 
Item3 INDEX 
Item4 INDEX 
Item5 INDEX 

< then all the data after that > 
+0

哇,谢谢你的链接了。我正在寻找文件头,除了.h文件以外,其他都不是。 – jarryd 2012-02-08 20:55:23

+0

在目录/索引部分,我想知道这是如何处理的。如果我将数据块一次一个地添加到文件中并对它们进行索引,将这些索引数据存储在目录中,那么我会在哪里启动实际数据,因为随着目录的增长,它有可能写入实际的数据。 – jarryd 2012-02-08 20:59:40

+0

@ Helium3:我已更新我的回答 – dreamlax 2012-02-08 21:31:54