|
|
|
Распаковка многотомного 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 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Предыдущая ошибка касалась, как выяснилось, функции GetFileSize Но это мелочи... Вот катастрофически примитивный код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. срабатывает по нажатию на кнопку. Выдаёт все сообщения в том числе и Done, никаких эксепшнов, ничего. И распаковки, собственно, тоже никакой... Если у кого-то есть опыт работы с данным компонентом, буду чрезвычайно благодарен за подсказку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2016, 19:42 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Замени TJclDecompressArchive на TJclZipDecompressArchive. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2016, 19:51 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRain, Можно еще принудительно все элементы в архиве выставить в Selected. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2016, 22:14 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
AniskinЗамени TJclDecompressArchive на TJclZipDecompressArchive. Да, благодарю, всё получилось, но теперь новая проблема: EIntOverflow Если я правильно понимаю, проблема в размере архива, благо эта хрень весит 8 гигов... Если брать более новую версию 7z.dll, которая, как я думаю, должна бы уметь работать с 64 разрядными архивами, получаю ошибку: Код: pascal 1. Как я понимаю, самый простой для меня способ будет всё-таки использовать некий консольный архиватор. Если у кого-то есть мысли в этом направлении, поделитесь пожалуйста! Заранее благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2016, 22:41 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRainЕсли у кого-то есть мысли в этом направлении, поделитесь пожалуйста У меня есть мысль, что неплохо бы было взять в ручки дебаггер, и посмотреть, в каком же месте происходит исключение и его причины, и посмотреть, что странного происходит при загрузке 7z.dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2016, 22:45 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
AniskinNapalmRainЕсли у кого-то есть мысли в этом направлении, поделитесь пожалуйста и посмотреть, что странного происходит при загрузке 7z.dll. A вот нефиг грузить из х32 приложения х64 библиотеку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 01:22 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
NapalmRain Как я понимаю, самый простой для меня способ будет всё-таки использовать некий консольный архиватор. Если у кого-то есть мысли в этом направлении, поделитесь пожалуйста! В принципе об этом уже говорили. А что непонятного в использовании? Вызов CreateProcess() с ожиданием завершения проблема? Тогда в JCL той же уже есть готовые функции. P.S. Насчет EIntOverflow непонятно - у JclXXXXDecompression все рабочие переменые в int64 - это еще постараться надо, чтобы на такое нарваться. И да, попробуй заменить версию 7z.dll на более новую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 01:30 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
DarkMasterA вот нефиг грузить из х32 приложения х64 библиотеку. Это было логичное предположение, но я скомпилировал приложение под 64 бита и ошибка не пропала. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. тогдка как переполнение Int происходит Код: pascal 1. 2. 3. 4. Переменная Index имеет тип Integer я заменил её на integer64 , но ошибка осталась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 23:31 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
В общем я таки решил использовать сторонний архиватор. Два дня тестов дали результат практически тот, который интересует. Для использования взял последнюю версию 7z.exe Если кому интересно, конечный вариант: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Где в процедуре ExtractTo может быть два варианта Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Для второго варианта Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Вот примерно так. Всё это нагуглено, но протестировано и работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 14:56 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
AniskinЯ достаточно плотно ковыряюсь с 7z, пишу (в принципе, уже написано) интеграцию 7z с Проводником, что бы можно открывать 7z архивы как папки. Могу сказать следующее. В контексте формата zip cама 7z не знает ни о каких томах. 7z работает с обезличенным потоком, у которого нет имени. Поэтому в 7z нужно передавать уже готовый поток, в котором слиты воедино все тома. Я это делаю путем создания потока-посредника, который уже и реализует чтение из конкретных томов. Как это сделано в jcl - я не знаю, смотри их код. А каким образом Вы готовите поток, в котором слиты воедино все тома? Простое слияние упорядоченных файлов в один не помогает( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 15:04 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Aniskin, Или хотя бы наводочку дайте, если не трудно. Очень требуется программно многотомник zip распаковать с помощью 7z.dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 15:07 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
xJuniorAniskinЯ достаточно плотно ковыряюсь с 7z, пишу (в принципе, уже написано) интеграцию 7z с Проводником, что бы можно открывать 7z архивы как папки. Могу сказать следующее. В контексте формата zip cама 7z не знает ни о каких томах. 7z работает с обезличенным потоком, у которого нет имени. Поэтому в 7z нужно передавать уже готовый поток, в котором слиты воедино все тома. Я это делаю путем создания потока-посредника, который уже и реализует чтение из конкретных томов. Как это сделано в jcl - я не знаю, смотри их код. А каким образом Вы готовите поток, в котором слиты воедино все тома? Простое слияние упорядоченных файлов в один не помогает( Только сейчас понял, что я набрехал. Извинюсь за дезинформацию. По теме - есть два варианта реализации разделения zip архива на тома. Первый - нативный zip-овский вариант. В нем дополнительные тома имеют расширение zNN, каждый том является независимым, имеет сигнатуры и т.д. В этом случае при открытии архива от callback процедуры требуется реализация интерфейса IArchiveOpenVolumeCallback. Черер этот интерфейс zip handler будут запрашивать потоки отдельных томов. Второй - нативный 7z-овский вариант. В нем дополнительные тома имеют расширение NNN, и тома получаются простым разделением zip архива на куски. В этом случае нужно создавать общий поток, содержащий все тома архива. (PS Поддержка нативного zip-овского варианта в 7-Zip появилась не сразу, возможно, на момент написания поста ее не было, тогда я не набрехал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 15:29 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Aniskin, Спасибо за разъяснение! Судя по Вашему описанию, я имею дело с первым (родным zip'овским) разделением. Из восьми томов отдельно как zip открываются только 4. Соответственно, не такие уж они и независимые (в том смысле, что отдельный том не есть отдельный zip-архив, если я правильно Вас понял). Вам доводилось сталкиваться с извлечением многотомников с помощью 7z? Пишу в Delphi 2007, но если есть пример реализации IArchiveOpenVolumeCallback на другом языке, буду и ему очень рад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 16:04 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
xJuniorПишу в Delphi 2007, но если есть пример реализации IArchiveOpenVolumeCallback на другом языке, буду и ему очень рад.А чем конкретно проблема состоит? У вас что то уже реализовано или с нуля пишите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 16:11 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
В дипломной работе должна быть возможность извлекать пусть не все, но хотя бы основные типы архивов. И я долгое время считал, что уж с zip'ом умею работать. Пока вот на многотомный архив не нарвался. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Эта конструкция никогда не подводила до недавнего времени(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 16:35 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Вы используете JclCompression? Тогда в список интерфейсов Код: pascal 1. 2. добавляйте интерфейс IArchiveOpenVolumeCallback и реализуйте его методы. Методов два - в GetStream открывайте том с переданным индексом, в GetProperty (если будет вызываться) возвращайте запрашиваемое свойство последнего открытого тома. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 16:58 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Нет, я использую обёртку 7z для Delphi - модуль sevenzip.pas. В интерфейсах используемого класса уже есть нужный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 17:53 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
И даже есть заглушки под его методы. В целом ваш совет понятен, спасибо, попробую реализовать эти методы. Просто думал у вас уже имеется готовый код, чтобы "велосипед не изобретать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2018, 17:57 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
Aniskin, Первым вызывается метод GetProperty с PROPID = kpidName. Пробовал по разному передать путь к следующему (второму) тому, передать просто имя файла следующего тома, пробовал передавать путь/имя первого тома - результат всегда один, извлекаются только файлы из первого тома. А GetStream вообще ни разу не выполняется. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Может ещё какие-то идеи подкинете? Заранее благодарен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2018, 12:24 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
xJunior, А работа с 7z принципиальна? или главное - результат? Тогда можете попробовать компонент fwZip от Rouse_ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2018, 12:37 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
goldmi45, Да, принципиальна. Это мощный инструмент и всё может. Надо просто научиться... Переделывать всё на fwZip не представляется возможным( Abbrevia, кстати, тоже хорошо справляется с многотомниками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2018, 13:07 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
xJuniorAniskin, Первым вызывается метод GetProperty с PROPID = kpidName. Пробовал по разному передать путь к следующему (второму) тому, передать просто имя файла следующего тома, пробовал передавать путь/имя первого тома - результат всегда один, извлекаются только файлы из первого тома. А GetStream вообще ни разу не выполняется. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Может ещё какие-то идеи подкинете? Заранее благодарен... При запросе kpidName нужно отдавать имя того тома, который вы передали изначально в Open. Я лично передаю просто имя без пути. И я не понял, с одной стороны вы говорите, что пытаетесь открыть нативные zip тома, но на практике передаете тома вида TempDel.zip.002, т.е. нативные 7z тома, которые не требуют плясок с IArchiveOpenVolumeCallback. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2018, 14:19 |
|
||
|
Распаковка многотомного ZIP архива
|
|||
|---|---|---|---|
|
#18+
AniskinИ я не понял, с одной стороны вы говорите, что пытаетесь открыть нативные zip тома, но на практике передаете тома вида TempDel.zip.002, т.е. нативные 7z тома, которые не требуют плясок с IArchiveOpenVolumeCallback. Хм, я почему-то решил, что механизм сборки томов работает одинаково, как для нативных 7z, так и для нативных zip архивов, т.е. пляски с IArchiveOpenVolumeCallback нужны всегда. Оказалось, что они нужны только для нативных zip-многотомников, как Вы и сказали. Хорошо, что Вы обратили на это внимание. Я подготовил нативный zip-многотомник, описал указанные два метода IArchiveOpenVolumeCallback (пока, правда, в примитивном виде), и о чудо, тома подтянулись один за другим! Всё заработало!!! Ура!!! Огромное Вам спасибо за профессионализм и оперативные подсказки! Мощь 7z.dll подтвердилась в очередной раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2018, 16:09 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038374]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 362ms |

| 0 / 0 |
