On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Пост N: 470
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 06.08.15 16:22. Заголовок: hb_zip / hb_unzip - как проверить целостность архива ?


Добрый день.

Неожиданно обнаружил, что один из создаваемых в автоматическом режиме архивов оказался битый.
Примерно 40% информации из 120 мегового файла "нормальные", а дальше - тупо CHR(0)

До этого момента и после него все идет как нужно, есть подозрение на RDP, которым скачивал файл с удаленного компа на локальный: с инетом были глюки, сессия рвалась несколько раз, каждый раз начинал заново. Копировал Far-ом, может он испортил файл в нештатной ситуации. А может и не он.

Чтобы исключить вопрос с Harbour, думаю потратить пару лишних секунд для проверки архива после его создания. Сходу никакой функции для этого дела не обнаружил... Не делать-же Unzip большого архива и сравнивать количество файлов ?

Нашел в тестах \contrib\hbmzip\tests пример:

hUnzip := hb_unzipOpen( cFileName )

IF ! Empty( hUnzip )
...
ENDIF

Подсунул ему свой битый файл, он тихо вернул пустой хэндл. На крайний случай - подойдет, но хотелось-бы что-нить более "правильное".

Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 35 , стр: 1 2 All [только новые]


постоянный участник


Пост N: 1125
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 06.08.15 16:27. Заголовок: MD5 не подойдет?..


MD5 не подойдет?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 471
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 06.08.15 17:24. Заголовок: PSP пишет: MD5 не п..


PSP пишет:

 цитата:
MD5 не подойдет?


Не очень понимаю, как его можно использовать. Речь ведь НЕ о передаче данных и проверке MD5 в источнике и приемнике, а о только что созданном архиве.

Как проверить, что архив "нормальный", если сравнивать MD5 пока не с чем?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1126
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 06.08.15 17:42. Заголовок: А, пардон. Я понял т..


А, пардон. Я понял так, что проверить надо после передачи.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5196
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.08.15 18:04. Заголовок: Sergy Как вариант с..


Sergy
Как вариант создал архив , рядом сложил текстовый файл имяАрхива.md5 , внутрь которого писанул
md5 архива. Дальше идея думаю ясна.
Не то ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1127
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 06.08.15 18:12. Заголовок: Дим, ему нужно после..


Дим, ему нужно после создания архива проверить целостность. Если он уже битый, то md5 будет вычислена с битого архива, что не меняет дела.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 472
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 06.08.15 18:39. Заголовок: PSP пишет: нужно по..


PSP пишет:

 цитата:
нужно после создания архива проверить целостность. Если он уже битый, то md5 будет вычислена с битого архива, что не меняет дела.


Да. Именно так.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5197
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.08.15 18:47. Заголовок: Точно )) C толку сби..


Точно ))
C толку сбил RDP.
А почему бы не создать с помощью hbnetio сервис (RPC) и создавать архив удаленно (не по сети)
а затем уже скачивать его чем надо. Вот тогда файлик .md5 и пригодится.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1128
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 06.08.15 18:53. Заголовок: Вроде есть функция h..


Вроде есть функция hb_zipFileCRC32( cFileName ). Она что на битом и на нормальном возвращает?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5198
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.08.15 21:26. Заголовок: Sergy пишет: Неожид..


Sergy пишет:

 цитата:
Неожиданно обнаружил, что один из создаваемых в автоматическом режиме архивов оказался битый


При удачном создании архива можно создавать файлик .md5 и качать их оба , после слива чекать md5

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 473
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 07.08.15 00:17. Заголовок: PSP пишет: Вроде ес..


PSP пишет:

 цитата:
Вроде есть функция hb_zipFileCRC32( cFileName ). Она что на битом и на нормальном возвращает?


Только что проверил - два разных длинных целых числа.



Dima пишет:

 цитата:
При удачном создании архива можно создавать файлик .md5 и качать их оба , после слива чекать md5


Файл оказался битый:
1) либо ДО закачки через RDP
2) либо ПОСЛЕ закачки через RDP, но в любом случае битый файл - ИСХОДНЫЙ. Приемный от исходного ничем не отличается. Такие-же 60% в конце - CHR(0).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1129
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 07.08.15 08:36. Заголовок: Sergy, а вот здесь H..


Sergy, а вот здесь Harbour\source\contrib\hbziparc\ не смотрел? Есть, к примеру, функция hb_GetFilesInZip( cFileName, lVerbose )
Может это подойдет?

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 474
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 07.08.15 23:08. Заголовок: PSP пишет: Sergy, а..


PSP пишет:

 цитата:
Sergy, а вот здесь Harbour\source\contrib\hbziparc\ не смотрел? Есть, к примеру, функция hb_GetFilesInZip( cFileName, lVerbose )
Может это подойдет?


Думаю, да, спасибо.

На битом архиве возвращает пустой массив.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1130
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.08.15 09:41. Заголовок: Ну и хорошо )))..


Ну и хорошо )))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5201
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.08.15 09:42. Заголовок: PSP пишет: На битом..


Sergy пишет:

 цитата:
На битом архиве возвращает пустой массив.


Битый он может быть по разному.
Берем архив и где нить внутри меняем пару-тройку байт , архив битый а массив будет не пустой.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1131
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.08.15 09:45. Заголовок: hb_GetFilesInZip() м..


hb_GetFilesInZip() может вернуть (lVerbose == .T.) массив со всеми подробностями о файлах в архиве, включая crc32 каждого файла. Вобщем, надо экспериментировать. )))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1132
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.08.15 10:13. Заголовок: Сейчас проверил. Дим..


Сейчас проверил. Дима прав. Если испортить несколько байт в уже готовом архиве, это выяснится только на этапе распаковки. hb_GetFilesInZip() этого не замечает. Получается, нужно комбинировать всё это вместе с md5 всего архива.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1133
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.08.15 10:23. Заголовок: И в догонку: как аль..


И в догонку: как альтернатива - внешний архиватор легко проверит архив на целостность.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 475
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 08.08.15 16:08. Заголовок: Хотелось-бы без внеш..


Хотелось-бы без внешних "альтернатив"... Тем более, "измененные" пара байт внутри архива всплывут только после распаковки, либо команды "проверить", что по сути будет распаковкой в NUL.

Самый правильный способ - распаковать архив в отдельную папку и сравнить crc32 или md5 каждого файла. Для этого достаточно штатных средств. Но это долго и вряд-ли оправдано, пока никем не обнаружен серьезный косяк с созданием собственно архива. hb_ZipFile() использую около года, единичный случай заставил насторожиться и принять меры по доп. проверке.

Несколько раз качал архив Фаром через RDP, рвал сессию, проверял исходный файл. Вроде пока норм. Буду проверять дальше.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5202
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.08.15 16:19. Заголовок: Sergy пишет: hb_Zip..


Sergy пишет:

 цитата:
hb_ZipFile() использую около года, единичный случай заставил насторожиться


Раз в году и палка стреляет

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 22.09.13
ссылка на сообщение  Отправлено: 26.02.16 12:55. Заголовок: Dima пишет: hb_ZipF..


Dima пишет:

 цитата:
hb_ZipFile() использую около года, единичный случай заставил насторожиться


Да, господа! Увы тоже столкнулся с глюком!!!
Всегда для архивации запускал внешние проги RAR или 7-zip, но решил попробовать hb_ZipFile(). Все было хорошо пока размеры
архива не превысили 2 Гб. Я обратил внимание при 2,2 Гб (но возможно точка отсчета иная...), что долгое время размер архива
не увеличивается, хотя должен расти. Часть файлов просто перестали затаскиваться! Были ли те, которые затащились битыми не проверял...
Вставил в прогу вместо hb_ZipFile() архивирование через 7zG.exe - все пошло нормально!
Может есть какие соображения? Как-то хочется, по возможности, использовать "все свое"


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 35 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 17
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет