|
|
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Доброго всем времени суток! Есть очень важная задача программно распаковать многотомный архив. Количество томов может быть разным. Пользуюсь версией XE8 Изначально пробовал средствами встроенного класса TZipFile вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Результат: EZipException поднята ошибка, с сообщением : Error reading zip file Переписал это же добро под использование 7z.dll и прикрутил к проекту sevenzip.pas Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Результат: Exception поднята ошибка, с сообщением : Неверная функция Буду благодарен за любой совет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 14:11 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
При этом с однотомными архивами никакой проблемы нет ни стандартным функционалом, ни 7z ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 14:12 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRain, Попробуй модуль JclCompression из JCL - насколько я помню, ихний TJclCompressionArchive поддерживает многотомные архивы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 14:54 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
А почему нельзя сделать сабж с помощью банальной командной строки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:10 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
LSV, потому что распаковка - это часть бизнес процесса более сложного приложения и одна из задач - сделать всё внутри одного приложения, не привязываясь к сторонним. Есть вероятность, что на рабочей станции будущего пользователя не будет установлен тот же винрар к примеру, таскать вместе со своей программой ещё сторонние exe - в моём случае очень плохая затея. Если же я неправильно понимаю предложение, поясните пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:25 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Решил проблему с ошибкой: Неверная функция. Проблема оказалась в версии библиотеки. Скачал с оф сайта 9.38, взял библиотеку оттуда, всё заработало. Но! 1. В качестве имени файла нужно передавать не сам архив а его первую часть и... Охохохох. Выгруженный файл был, так сказать, не совсем тем, который я туда упаковал. А именно имел размер всего 117 мегабайт из запакованных 900. Перепаковал, изменив размер тома на 200 метров, и снова распаковал и снова получил в ответ неполный файл, а кусочек из 222 метров. То есть распаковывается только та часть архива, которую я указываю. остальные не подтягиваются. Попытаюсь сейчас скачать установить JCL, посмотрим, что из этого выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:29 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRainLSV, потому что распаковка - это часть бизнес процесса более сложного приложения и одна из задач - сделать всё внутри одного приложения, не привязываясь к сторонним. Есть вероятность, что на рабочей станции будущего пользователя не будет установлен тот же винрар к примеру, таскать вместе со своей программой ещё сторонние exe - в моём случае очень плохая затея. Если же я неправильно понимаю предложение, поясните пожалуйста.Ну все равно ваш продукт будет использовать что-то сторонее. Зачем этого боятся ? К счастью архиватор это просто ехе-файл. Таскайте его с приложением (выгружайте автоматом при старте). В чем проблемы ? У других продуктов проблемы в сто раз сложнее, т.к. зачастую они сильно зависят от стороннего ПО, которое не идет с самим продуктом: конективити, драйвера, сом-объекты, ДЛЛ ядра и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:35 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
LSVНу все равно ваш продукт будет использовать что-то сторонее. Зачем этого боятся ? К счастью архиватор это просто ехе-файл. Таскайте его с приложением (выгружайте автоматом при старте). В чем проблемы ? У других продуктов проблемы в сто раз сложнее, т.к. зачастую они сильно зависят от стороннего ПО, которое не идет с самим продуктом: конективити, драйвера, сом-объекты, ДЛЛ ядра и пр. Проблема кроется немного в другом, я должен упростить свой продукт на столько сильно, на сколько это вообще возможно. Потенциальные пользователи - оооочень неумелы, программа не будет устанавливаться или ещё каким-то умным образом давать пользователю только ярлычок. Они будут качать архивчик и в нём будет один экзешник и возможно одна дллка, они будут счастливы, что не запутались и клацнут именно туда, куда надо. Чем больше лишнего там будет, тем сложнее будет жить... Слышал, что сторонние файлы (типа файлов конфигурации и dll) можно и вовсе вшить внутрь exe файла, правда с этим не сталкивался. Но один exe в другой уже не завернёшь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:45 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRainНо один exe в другой уже не завернёшь... Ресурсы? Не, не слышал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:54 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
DarkMasterРесурсы? Не, не слышал... не слышал... можно подробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 15:56 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRain, В ресурсы можно вшить хоть слона. Во время работы достаешь из ресурсов необходимый тебе exe во временную папочку, запускаешь, ждешь пока отработает, удаляешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 16:02 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRain, По шагам: 1) Делаем .RC файл (например ARCH.RC) MYARCHIVER RCDATA c:\archiver\archiver.exe 2) Запихиваем ресурсы в EXE {$R 'ARCH.res' 'ARCH.RC'} 2) Доступаемcя Код: pascal 1. 2. 3. Фсе ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 16:17 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Если у вас есть БД, то можно воткнуть туда. У меня так сделано обновление проги. Прога зырит в БД и видит дату файла. Сравнивает и сигналит если надо обновлять. Жмем "Обновить". Файлик вытаскивается из базы и копируется рядом. Потом передается управление прожечке, кот. скопирует новый файл поверх старого. Основная прога закрывается, прожечка меняет файлик и запускает его. На все менее 5сек. Развертывание еще проще: если вижу, что новая версия проги нормально работает, просто жму "Загрузить в БД". Через 2 сек все юзеры могут обновляться (у них выскочит соотв. сообщение). Никаких сайтов, ftp, общих папок или таскания на флешке. Прога - дестоп-приложение для БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 16:33 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
какие ресурсы, вставлять файл в базу? что за ужас простой же вопрос - как распаковать многотомный архив? лучше без внешнего приложения сейчас обертка над 7z отлично распаковывает одиночные файлы и отлично распаковался первая часть многотомного архива как распаковать остальное? Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 18:02 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
qwertEHOK, Я подозреваю, что стоит проделать ту же операцию над всеми частями многотомного архива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 18:06 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRain, очень мало информации на эту тему. единственное, что нашел, что надо курить в сторону IArchiveOpenVolumeCallback, но примеров не видел, сам интерфейс реализован, но возвращает всегда S_OK... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 19:21 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Я достаточно плотно ковыряюсь с 7z, пишу (в принципе, уже написано) интеграцию 7z с Проводником, что бы можно открывать 7z архивы как папки. Могу сказать следующее. В контексте формата zip cама 7z не знает ни о каких томах. 7z работает с обезличенным потоком, у которого нет имени. Поэтому в 7z нужно передавать уже готовый поток, в котором слиты воедино все тома. Я это делаю путем создания потока-посредника, который уже и реализует чтение из конкретных томов. Как это сделано в jcl - я не знаю, смотри их код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 21:01 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
DarkMasterNapalmRain, Попробуй модуль JclCompression из JCL - насколько я помню, ихний TJclCompressionArchive поддерживает многотомные архивы. Есть ли хоть какой-нибудь маломальский пример того, как этим пользоваться? Ничего толкового найти не смог... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 21:07 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
AniskinЯ достаточно плотно ковыряюсь с 7z, пишу (в принципе, уже написано) интеграцию 7z с Проводником, что бы можно открывать 7z архивы как папки. Могу сказать следующее. В контексте формата zip cама 7z не знает ни о каких томах. 7z работает с обезличенным потоком, у которого нет имени. Поэтому в 7z нужно передавать уже готовый поток, в котором слиты воедино все тома. Я это делаю путем создания потока-посредника, который уже и реализует чтение из конкретных томов. Как это сделано в jcl - я не знаю, смотри их код. А вот это интересная мысль... За подсказку благодарю! Постараюсь подумать в этом направлении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 22:28 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
DarkMasterЯ подозреваю, что стоит проделать ту же операцию над всеми частями многотомного архива. если подсовывать их по отдельности пишет ошибку - "Неверная функция" я даже подумывал что нужно склеить все части и подсовывать как единый файл, но у файла должны же быть какие служебные признаки которые нужно удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2016, 08:58 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRainDarkMasterNapalmRain, Попробуй модуль JclCompression из JCL - насколько я помню, ихний TJclCompressionArchive поддерживает многотомные архивы. Есть ли хоть какой-нибудь маломальский пример того, как этим пользоваться? Ничего толкового найти не смог... У них демка живет в _JCL_INSTALLATION_FOLDER_\examples\windows\compression\archive\. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2016, 11:17 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Демка на многотомный архив говорит - Not Supported format ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2016, 15:52 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
qwertEHOKДемка на многотомный архив говорит - Not Supported format ((( Not Supported format обозначает, что ты передаешь несоответствующий тип архива в распаковщик. Например, передаешь zip архив в распаковщик 7z, или наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2016, 16:26 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
qwertEHOK, Нужно список Volume составить: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2016, 17:02 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
DarkMaster, не очень понял, что должно быть в переменной AInputFile Передаю туда имя файла, получаю Код: pascal 1. Передаю туда поток с файлом, получаю аналогичную ошибку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2016, 15:42 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39151555&tid=2038374]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 303ms |

| 0 / 0 |
