Атрибуты архива

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

serna писал(а):Контрольная сумма файла в архиве и вне его одинакова или нет?
Если считать по одинаковому алгоритму, то одинаковая.
Даже в том алгоритме, что я приаттачил, используются некоторые, скажем так, инициализационные параметры. Таким образом, при различных параметрах этот (т.е. один и тот же алгоритм) будет давать разные CRC32. Просто те параметры, которые используются архиватором ZIP (и RAR) известны, поэтому возможно расчитывать по алгоритму этих архиваторов.

Если тебе надо это на Delphi написать, то, может, проще всего не ковыряться с моим текстом, а обратить внимание на совет MOTOCoder-а:
MOTOCoder писал(а):А с какими архивами планируется работать?
Если с zip, то можно использовать компонент типа ZipForge.
Потому как в моем варанте ради убыстрения расчета многие моменты переведены с Паскаля на ассемблер. Черт знает, правильно ли это будет работать под Delphi, даже если скомпилируется (модель-то 32-разрядная, в отличие от Паскаля)

Архиваторы ZIP и RAR дают одинаковую CRC32.
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Serna, 1) если надо есть две независимые библиотеки для расчёта CRC32.
в исходниках. На "чистом" (native) Pascal ( поэтому даже TP 7.0 компилятся и работают).
CRC32 дают стандартное! (т.е. такое же, какое дадут CRC32 от ARJ, PKZIP, RAR и т.д.)
2) есть в сети утилиты для вычисления хэш разных файлов. Например, DAMN Hash Calculator v1.5.1 (размер 52 кб) - вычисляет огромное число разных хешей (в том числе и старый добрый CRC32:
- Hashes supported:
- MD5
- SHA-160 (SHA-1), SHA-256, SHA-384, SHA-512
- RIPEMD-160
- HAVAL (3, 4, 5 passes; 128, 160, 192, 224, 256 bits)
- Good old CRC-32 (although very insecure, but it's a hash
function, too)

4) возьмите файл, в нём напишите "1" (цифру один без кавычек) и сохраните.
Если вы сделали всё верно, то размер файла будет ровно один байт!
и для него CRC32:
Name Size CRC-32
-------------------------- -------- ---------
1.TXT 1 83DCEFB7
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

BBB писал(а):Если считать по одинаковому алгоритму, то одинаковая.


Потому как в моем варанте ради убыстрения расчета многие моменты переведены с Паскаля на ассемблер. Черт знает, правильно ли это будет работать под Delphi, даже если скомпилируется (модель-то 32-разрядная, в отличие от Паскаля)

Архиваторы ZIP и RAR дают одинаковую CRC32.
Да, этот модуль откомпилить не удастся-Delphi не компилит INLINE-код.
Ни что так не ограничивает фантазию программиста, как компилятор...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

MOTOCoder писал(а):Да, этот модуль откомпилить не удастся-Delphi не компилит INLINE-код.
В общем, переделал под Delphi. inline еще полбеды. Еще и текст на встроенный ассемблере, как я и предполагал, плохо пережил переход на 32-разрядную Delphi. Компилироваться-то компилировался, но ексепшн выбрасывал. Переписал его обратно на Delphi-ные операторы. Быстродействия не гарантирую, но zip/rar CRC32, как будто, считает верно.

Пример использования:

[syntax='delphi']uses SysUtils,
Dialogs,
CRCMODEL4Delphi;

procedure ShowCRC32 (stFileName : string);
var ulCRC : ulong;
iErr : integer;
begin
iErr := FileZipCRC_ByName (stFileName, ulCRC);
if (iErr <> 0) then
ShowMessage ('Ошибка рассчета CRC #' + iErr)
else
ShowMessage ('CRC: ' + IntToHex (ulCRC, 8));
end;[/syntax]
Вложения
CRCMODEL4Delphi.zip
(9.7 КБ) 24 скачивания
serna
Сообщения: 12
Зарегистрирован: 03 янв 2008, 21:15

Зашла на Yandex. Нашла фрагмент который мне необходим для подсчёта CRC32. Результат получается такой же как и в окне WinRar. Пробовала на 7 файлах.

Методом проб и ошибок догадалась, что размер упакованного файла = (размер архива, содержащего данный файл - 134). Также пробовала на 7 файлах. Возможно ошибаюсь.
Вложения
подсчёт CRC32.zip
(5.91 КБ) 28 скачиваний
serna
Сообщения: 12
Зарегистрирован: 03 янв 2008, 21:15

Спасибо всем кто пытался помочь!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

&quot писал(а):размер упакованного файла = (размер архива, содержащего данный файл - 134).
вот это - не понял. Что подразумевалось под "архивом" и "упакованным файлом"
Изображение
serna
Сообщения: 12
Зарегистрирован: 03 янв 2008, 21:15

Игорь Акопян,
&quot писал(а):вот это - не понял. Что подразумевалось под "архивом" и "упакованным файлом"
я наверно не верно объяснила.
Есть файл "1.xml" (размер 230). Упаковали в архив WinRar-ом (файл "1.rar"-размер 200) вычитаем 134 и получаем размер файла в архиве - 66 (в окне WinRar колонка Packed) Проверяла не нескольких файлах - всегда верно.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

имхо не верно, ибо это зависит от степени сжатия ;)
т.е. если установить параметрами минимальную или максимальную степень сжатия (m0..m5) то будет разница
Думаю что если надо получить размер файла в архиве (собственно степень упаковки) надо копать в сторону их АПИ... кстати, есть фришный компонент http://www.rarlab.com/rar_add.htm для дельфей, полагаю там может быть всё что надо
Изображение
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Ну а если файлов несколько? Уже метод не поможет.
Ни что так не ограничивает фантазию программиста, как компилятор...
Ответить