Страница 1 из 1

Проверка архив ли это?

СообщениеДобавлено: 30.09.2013 15:32:37
gvido
Пару раз задавался вопросом:
---
Как проверить, является ли данный файл архивом?
Если файл - архив, то какой архив(каким архиватором упакован)?
----
Первое, что пришло в голову, попытаться найти закономерности в заголовке файла.
В arj, ms cab, pkzip - нашел быстро, но вот с остальными, проблема...
Есть ли варианты как-то определить данное свойство файла? Конечно интересует кроссплатформенный вариант.
Для начала сойдет вариант под Windows.
У кого какие идеи есть по этому счету? Если есть какие либо компоненты, которые решают данную задачу, то очень бы хотелось посмотреть, как именно это делается.

Re: Проверка архив ли это?

СообщениеДобавлено: 30.09.2013 16:32:46
ViTality
одна из первых ссылок в яндексе
http://habrahabr.ru/post/186828/
а там две ссылки на списки сигнатур
http://en.wikipedia.org/wiki/List_of_file_signatures
http://filesignatures.net/index.php?page=all
думаю для вашей задачи достаточно более чем

Re: Проверка архив ли это?

СообщениеДобавлено: 30.09.2013 17:09:31
gvido
Спасибо. :)
Да, пожалуй, это то, что было нужно. :)


ps.
Правильно сформулированный вопрос содежит как минимум часть ответа. :)

Re: Проверка архив ли это?

СообщениеДобавлено: 30.09.2013 17:26:38
debi12345
Нужно точно узнать или навскидку ? Если навскидку - то через сигнатуры. Если нужно точно - сперва сигнатура, потом - тестирование арихива тем архиватором, что увязан с сигнатурой.

Re: Проверка архив ли это?

СообщениеДобавлено: 01.10.2013 13:44:46
gvido
Нужно узнать быстро и максимально точно.

Re: Проверка архив ли это?

СообщениеДобавлено: 01.10.2013 18:46:32
debi12345
Нужно узнать быстро и максимально точно.

Если архив битый или недокачанный (заголовок/сигнатура в порядке, начальная часть данных -тоже, остальное - мусор) - без (возможно медленного) тестрирования всего архива не обойдешься. Если есть возможность (заранее известные имена и контрольные суммы файлов,..) - можно вместо тестирования архива сличать конрольные суммы, в идеале - SHA256-хэши.