Формат файла tar находится здесь в Википедии.
Я подозреваю, что вам лучше всего проверить правильность контрольной суммы заголовка для первого файла. Вы также можете проверить правильность имени файла, но это может быть ненадежно, в зависимости от имен файлов, которые там хранятся.
Дублирую соответствующую информацию здесь:
Offset Size Description
0 100 File name
100 8 File mode
108 8 Owner's numeric user ID
116 8 Group's numeric user ID
124 12 File size in bytes
136 12 Last modification time in numeric Unix time format
148 8 Checksum for header block
156 1 Link indicator (file type)
157 100 Name of linked file
Контрольная сумма вычисляется путем взятия суммы значений байтов без знака блока заголовка с восемью байтами контрольной суммы, принятыми за пробелы ASCII (десятичное значение 32).
Он хранится в виде шестизначного восьмеричного числа с ведущими нулями, за которыми следует нуль, а затем пробел.
Различные реализации этого не придерживаются, поэтому использование шести цифр с первым пустым пространством для контрольной суммы обеспечивает лучшую совместимость. Кроме того, некоторые исторические реализации tar обрабатывали байты как подписанные.
Читатели должны вычислять контрольную сумму в обоих направлениях и рассматривать ее как правильную, если сумма со знаком или без знака совпадает с включенной контрольной суммой.
Существует также формат UStar (также подробно описанный в этой ссылке), но, поскольку он является расширением старого формата tar, метод, описанный выше, все еще должен работать. UStar обычно предназначен только для хранения дополнительной информации о каждом файле.
В качестве альтернативы, поскольку Python является открытым исходным кодом, вы можете увидеть, как работает is_tarfile
, и адаптировать его для проверки вашего потока, а не файла. Исходный код доступен здесь под Python-3.1.1/Lib/tarfile.py
, но он не для слабонервных. сердце :-)
person
paxdiablo
schedule
24.11.2009