Как создать заголовок для собственного формата файла? - PullRequest
1 голос
/ 08 февраля 2012

Как создать заголовок файла в C, чтобы можно было определить тип файла при чтении заголовка?

Как правильно это сделать, есть ли стандарты, которым нужно следовать?

Я хотел бы добавить небольшой заголовок в мой файл, чтобы при чтении заголовка можно было определить тип файла.

Обновление (если у вас нет шляпы):

Я хочу добавить заголовок для моего собственного формата файла (не файла .c или .h), используя C, и я буду использовать C для чтения файла, его идентификации и обработки.

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Вы можете просто написать некоторые пользовательские данные в начале вашего файла так же, как вы бы сохранили любые другие данные.

Например, Формат PGM указывает, что существуют размеры изображения и максимумзначение, хранящееся в первых строках:

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

Нет стандартов, которые бы указывали на создание заголовка такого типа, так как это очень редко делается.В случае изображений PGM вы не знали бы размеры изображения без этого заголовка - вы читали бы 12 байтов, но вы не знали бы, является ли это изображение размером 3x4 или 6x2 ...

Обратите внимание, что этот вид пользовательских данныхэто то, что вы должны ожидать, что будет сохранено в начале файла , когда вы читаете его .Вы можете создать собственный заголовок для ваших файлов, но затем убедитесь, что люди, которые собираются использовать ваши файлы, знают это.

3 голосов
/ 09 февраля 2012

Многие форматы файлов начинаются с небольшого кода ASCII или распознаваемого числа, чтобы его можно было идентифицировать, если он открыт редактором или шестнадцатеричным редактором. Их также иногда называют «магическими числами» или «файловыми подписями». Например:

  1. Первые четыре байта файла GIF: GIF, за которыми следует трехбуквенная версия (87a или 89a).

  2. Первые два байта zip-файла: PK (исходные инициалы автора ZIP-файла)

  3. Первые шесть байтов двоичного формата файла Apple для plist: bplist

Полный список здесь . Обычно следует информация о том, что содержится в файле, например, оглавление, а затем ваши фактические данные.

EDIT

Звучит так, будто вы ищете заголовок переменной длины. Заголовок переменной длины обычно начинается с количества элементов в заголовке, поэтому, например, если в вашем файле 5 элементов, ваш заголовок может выглядеть следующим образом:

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

< then all the data after that >
...