Страница 2 из 3

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

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

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

Архиваторы ZIP и RAR дают одинаковую CRC32.

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

Добавлено: 20 янв 2008, 14:43
Serge_Bliznykov
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

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

Добавлено: 20 янв 2008, 15:36
MOTOCoder
BBB писал(а):Если считать по одинаковому алгоритму, то одинаковая.


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

Архиваторы ZIP и RAR дают одинаковую CRC32.
Да, этот модуль откомпилить не удастся-Delphi не компилит INLINE-код.

Версия unit-а под Dephi.

Добавлено: 21 янв 2008, 10:23
BBB
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]

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

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

Методом проб и ошибок догадалась, что размер упакованного файла = (размер архива, содержащего данный файл - 134). Также пробовала на 7 файлах. Возможно ошибаюсь.

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

Добавлено: 21 янв 2008, 20:06
serna
Спасибо всем кто пытался помочь!

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

Добавлено: 22 янв 2008, 11:26
Игорь Акопян
&quot писал(а):размер упакованного файла = (размер архива, содержащего данный файл - 134).
вот это - не понял. Что подразумевалось под "архивом" и "упакованным файлом"

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

Добавлено: 23 янв 2008, 10:16
serna
Игорь Акопян,
&quot писал(а):вот это - не понял. Что подразумевалось под "архивом" и "упакованным файлом"
я наверно не верно объяснила.
Есть файл "1.xml" (размер 230). Упаковали в архив WinRar-ом (файл "1.rar"-размер 200) вычитаем 134 и получаем размер файла в архиве - 66 (в окне WinRar колонка Packed) Проверяла не нескольких файлах - всегда верно.

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

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

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

Добавлено: 23 янв 2008, 15:12
MOTOCoder
Ну а если файлов несколько? Уже метод не поможет.