Автор | Сообщение |
|
| |
Пост N: 194
Зарегистрирован: 03.12.08
|
|
Отправлено: 18.11.14 12:15. Заголовок: Чем лучше протестировать ZIP-файл на ошибки ?
Скачиваю .ZIP архивы по FTP . Иногда с ошибками приходят (бывает что на FTP уже с ошибкой лежит , хотя - красивый такой) Требуется проверить на наличие ошибок в архиве , чтоб предпринять какие-то действия перед распаковкой архива . В архиве несколько файлов . Поможете ? :)
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 317
Зарегистрирован: 16.12.08
|
|
Отправлено: 18.11.14 13:40. Заголовок: Когда формируется ар..
Когда формируется архивный файл (инсталяции программ и тд) формируется файл с контрольной сумой данного файла (MD5). Берёте этот код, подсчитываете контрольную суму вашего архива (утилит много : fciv.exe, md5sum.exe) сравниваете. Файл с ошибками открывается в программе?
|
|
|
|
| |
Пост N: 4273
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.11.14 14:28. Заголовок: Как то так. azip:=h..
Как то так. azip:=hb_GetFilesInZip("test.zip") if len(azip)==0 ? "Архив битый" endif
|
|
|
|
| |
Пост N: 196
Зарегистрирован: 03.12.08
|
|
Отправлено: 18.11.14 14:28. Заголовок: Последовательность д..
Последовательность действий такая : Кто-то из клиентов формирует у себя архив ZIP (программой на HARBOUR) , затем передаёт в хранилище (по FTP) . Другой пользователь принимает этот файл из хранилища ( по FTP) .... и пытается извлечь из него файлы .... Если были ошибки - программа вываливается . Хочется узнать - архив битый или нет , прежде чем пытаться разархивировать. Внешние утилиты не буду использовать . Должно быть средство проверки целостности архива . На крайняк - перехватывать ошибку и разбирать . Ошибка может возникнуть и при передаче в хранилище и при скачивании с него . PS : Дима , дело в том что даже битый архив (гад!) показывает что там есть файлы и т д ... то есть с виду всё гуд . Но он запорчен . Пока вижу как простой вариант - передавать вместе с архивом и 'описание' - например длину файла в байтах или контрольную сумму
|
|
|
|
| |
Пост N: 318
Зарегистрирован: 16.12.08
|
|
Отправлено: 18.11.14 15:00. Заголовок: Попробуйте поработат..
Попробуйте поработать с контрольной сумой, вместе с архивом создаётся файл с контрольной сумой данного архива.
|
|
|
|
| |
Пост 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 ? А потому что как только файл начал заливаться на ФТП он там уже доступен хотя может быть еще и не залит до конца. Вариант с контрольной суммой тоже нормальный !
|
|
|
|
| постоянный участник
|
Пост N: 1003
Зарегистрирован: 27.01.07
|
|
Отправлено: 18.11.14 15:30. Заголовок: Dima пишет: потому ..
Dima пишет: цитата: | потому что как только файл начал заливаться на ФТП он там уже доступен хотя может быть еще и не залит до конца |
| Вот это, думаю, и есть причина скачивания "битых" zip-ов.
|
|
|
|
| |
Пост N: 197
Зарегистрирован: 03.12.08
|
|
Отправлено: 18.11.14 15:40. Заголовок: Кстати - по поводу з..
Кстати - по поводу заливки на ФТП с ошибкой .... очень может быть что в тот момент как я заливаю - кто-то его уже тащит .... и проблема . ? Как средствами HARBOUR/MINIGUI получить контрольную сумму и проверять её ? При переименовывании файла НА ФТП - старый обязательно удалять или ренэйм в '.OLD' ?
|
|
|
|
| |
Пост N: 4275
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.11.14 15:51. Заголовок: Softlog86 пишет: ? ..
Softlog86 пишет: цитата: | ? При переименовывании файла НА ФТП - старый обязательно удалять или ренэйм в '.OLD' ? |
| От твоей задачи зависит. Поиграйся. У себя сразу , в случае удачной передачи делаю ренейм.
|
|
|
|
| |
Пост N: 4276
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.11.14 15:54. Заголовок: Dima пишет: ? Как с..
Softlog86 пишет: цитата: | ? Как средствами HARBOUR/MINIGUI получить контрольную сумму и проверять её |
| HB_MD5FILE
|
|
|
|
| |
Пост 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 |
|
|
|
|
|
| |
Пост 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
|
|
|
|
|
| |
Пост N: 4277
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.11.14 18:18. Заголовок: Вообще если нужно ми..
Вообще если нужно минимум переделок то надо доработать программу которая заливает на фтп архивы. А именно: после передачи проверить длину файла в байтах переданного и исходного который наливался. Если длина совпала (и файл есть на фтп) тогда делаем oFtp:rename
|
|
|
|