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



Пост N: 194
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 18.11.14 12:15. Заголовок: Чем лучше протестировать ZIP-файл на ошибки ?


Скачиваю .ZIP архивы по FTP . Иногда с ошибками приходят (бывает что на FTP уже с ошибкой лежит , хотя - красивый такой)

Требуется проверить на наличие ошибок в архиве , чтоб предпринять какие-то действия перед распаковкой архива .

В архиве несколько файлов .

Поможете ? :)

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







Пост N: 317
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 18.11.14 13:40. Заголовок: Когда формируется ар..


Когда формируется архивный файл (инсталяции программ и тд) формируется файл с контрольной сумой данного файла (MD5). Берёте этот код, подсчитываете контрольную суму вашего архива (утилит много : fciv.exe, md5sum.exe) сравниваете.

Файл с ошибками открывается в программе?

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




Пост N: 4273
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.11.14 14:28. Заголовок: Как то так. azip:=h..


Как то так.
 
azip:=hb_GetFilesInZip("test.zip")
if len(azip)==0
? "Архив битый"
endif


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



Пост N: 196
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 18.11.14 14:28. Заголовок: Последовательность д..


Последовательность действий такая :
Кто-то из клиентов формирует у себя архив ZIP (программой на HARBOUR) ,
затем передаёт в хранилище (по FTP) .

Другой пользователь принимает этот файл из хранилища ( по FTP) .... и пытается извлечь из него файлы ....
Если были ошибки - программа вываливается . Хочется узнать - архив битый или нет , прежде чем пытаться разархивировать.
Внешние утилиты не буду использовать . Должно быть средство проверки целостности архива . На крайняк - перехватывать ошибку и разбирать .
Ошибка может возникнуть и при передаче в хранилище и при скачивании с него .
PS : Дима , дело в том что даже битый архив (гад!) показывает что там есть файлы и т д ... то есть с виду всё гуд . Но он запорчен . Пока вижу как простой вариант - передавать вместе с архивом и 'описание' - например длину файла в байтах или контрольную сумму



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





Пост N: 318
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 18.11.14 15:00. Заголовок: Попробуйте поработат..


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


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




Пост N: 4274
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.11.14 15:11. Заголовок: Softlog86 У меня по..


Softlog86
У меня похожая задача и тоже файлы (ZIP) приходят с ФТП
При чем связка hb_GetFilesInZip и далее HB_UNZIPFILE не подводит уже много лет.
Архивы на ФТП тоже ложит моя программа(другая) но в ней стоят проверки
на корректность переданного файла. При чем сразу я передаю ZIP не как TEST.ZIP
а как TEST.TST и если передача успешна то переименовываю его в TEST.ZIP прямо
на ФТП. Почему расширение сразу не ZIP ? А потому что как только файл начал
заливаться на ФТП он там уже доступен хотя может быть еще и не залит до конца.
Вариант с контрольной суммой тоже нормальный !

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


Пост N: 1003
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 18.11.14 15:30. Заголовок: Dima пишет: потому ..


Dima пишет:

 цитата:
потому что как только файл начал
заливаться на ФТП он там уже доступен хотя может быть еще и не залит до конца


Вот это, думаю, и есть причина скачивания "битых" zip-ов.

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



Пост N: 197
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 18.11.14 15:40. Заголовок: Кстати - по поводу з..


Кстати - по поводу заливки на ФТП с ошибкой .... очень может быть что в тот момент как я заливаю - кто-то его уже тащит .... и проблема .

? Как средствами HARBOUR/MINIGUI получить контрольную сумму и проверять её
? При переименовывании файла НА ФТП - старый обязательно удалять или ренэйм в '.OLD' ?


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




Пост N: 4275
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.11.14 15:51. Заголовок: Softlog86 пишет: ? ..


Softlog86 пишет:

 цитата:
? При переименовывании файла НА ФТП - старый обязательно удалять или ренэйм в '.OLD' ?


От твоей задачи зависит. Поиграйся.
У себя сразу , в случае удачной передачи делаю ренейм.

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




Пост N: 4276
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.11.14 15:54. Заголовок: Dima пишет: ? Как с..


Softlog86 пишет:

 цитата:
? Как средствами HARBOUR/MINIGUI получить контрольную сумму и проверять её


HB_MD5FILE

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





Пост N: 319
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 18.11.14 16:16. Заголовок: HB_MD5File() Calcul..



 цитата:

HB_MD5File()
Calculates a message digest for a file using the MD5 algorithm.
Syntax
HB_MD5File( <cFileName> ) --> cMD5

Arguments
<cFileName>
This is a character string holding the name of the file to process. It must include path and file extension. If the path is omitted from <cFileName>, the file is searched in the current directory. Return
The function returns a character string of 32 characters which is the message digest of the file specified.
Description
HB_MD5File() does the same as HB_MD5() but processes an entire file rather than a character string. The result is the message digest of the file <cFileName> which can be used to detect if the file is changed.

// The example implements a simple command line tool that
// displays the MD5 message digest of a file.

PROCEDURE Main( cFileName )
IF PCount() > 0 .AND. File( cFileName )
? HB_MD5File( cFileName )
ELSE
? "Usage: MD5File <filename>"
ENDIF
RETURN




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



Пост N: 115
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 18.11.14 16:41. Заголовок: передавать вместе с архивом и 'описание' - например длину файла в байтах или контрольную сумму


...передавать вместе с архивом и 'описание' - например длину файла в байтах или контрольную сумму
Именно, только не вместе, а только после того, как полностью пройдет UPLOAD.
Выгрузку основного большого TEST.ZIP нужно делать под другим именем, например TEST.TMP,
чтобы читающий FTP не начал делать DOWNLOAD до окончания UPLOAD.
После завершения UPLOAD TEST.TMP его нужно переименовать на FTP в TEST.ZIP (это быстрая операция),
и только затем сделать UPLOAD файла описания TEST.TXT, в котором кстати и указано - целевое имя TEST.ZIP, его размер, к.сумма и т.д.
Читающий FTP - читает сначала TEST.TXT и только потом находит в нем имя основного файла для DOWNLOAD




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




Пост N: 4277
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.11.14 18:18. Заголовок: Вообще если нужно ми..


Вообще если нужно минимум переделок то надо доработать программу которая заливает
на фтп архивы. А именно: после передачи проверить длину файла в байтах переданного
и исходного который наливался. Если длина совпала (и файл есть на фтп) тогда делаем oFtp:rename

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

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