Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/89: Рейтинг темы: голосов - 89, средняя оценка - 4.91
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Как программно распаковать архив ZIP

03.12.2011, 21:48. Показов 17659. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех.

Возникла необходимость программной распаковки архива zip. Подскажите в каком направлении рыть?
Есть такая мысль, вместе со своей программой, ложить консольную версию 7z.exe, затем вызывать её с ключами распаковки и т.д.
Code
1
7z.exe e MyFile.zip
Есть ли какой-либо программный вариант без вызова внешней утилиты?

Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2011, 21:48
Ответы с готовыми решениями:

Распаковать архив программно
Вобщем заработало вот так: ZipForge1->FileName ="c:\\test.rar"; ZipForge1->OpenArchive(); //ZipForge1->Password = "1"; ...

Распаковать cab архив?
Как можно распаковать cab архив программно в С++?

Запаковка папки в архив программно
Можно ли как-либо папку находящююся на диске С запаковать в архив рар или зип, вместе со всеми файлами?

9
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.12.2011, 22:36
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Maestro Посмотреть сообщение
Есть ли какой-либо программный вариант без вызова внешней утилиты?
конечно:)
3
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
04.12.2011, 10:08
Maestro, Создание zip-архивов
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
04.12.2011, 18:35  [ТС]
Спасибо. Проще всего оказалось по ссылке Нитана.

Всё работает, но, мне нужен вариант с перезаписью извлекаемых файлов.
C++
1
2
3
4
5
6
7
8
9
10
...
   path = "";
   if(SelectDirectory("Мой компьютер", "", path)){
      ZipForge1->FileName = str + "\\arhive.zip";
      ZipForge1->OpenArchive(fmOpenRead);
      ZipForge1->BaseDir = path;
      ZipForge1->ExtractFiles("*.*");
      ZipForge1->CloseArchive();
     }
...
Есть архив, программа по нажатию на кнопку - извлекает содержимое архива в выбранную папку. Проходит время, этот архив может быть новее старого и естественно, при извлечении нужно перезаписать старое содержимое, новым. Не могу понять, почему после первого извлечения, не происходит перезапись, что нужно добавить ещё?
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
06.12.2011, 14:43  [ТС]
Идей никаких нет? Я так понимаю компонент ZipForge не поддерживает распаковку с последующей перезаписью извлекаемых файлов?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.12.2011, 15:20
C++
1
2
3
if (FileExists(filename)) {
  ReplaceFile(from_path,to_path);
}
просто мысль...
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
06.12.2011, 23:42  [ТС]
LK, я так понимаю, извлекать во временную директорию, а потом из неё копировать файл в нужную директорию?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.12.2011, 23:48
я бы просто начал извлекать в нужную директорию и проверял наличие в ней файла, если FileExists(filename) подтвердила его наличие, делал ReplaceFile(ИмяИмеющегосяФайла,ИмяФайлаИ зАрхива) , да оно само делается как бы , или удалять имеющися файл
C++
1
2
3
if (FileExists(filename)) {
  DeleteFile(filename);
}
и копировать с чувством хорошо выполненного служебного долга
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
12.12.2012, 23:31  [ТС]
Приветы всем.

Вопрос по работе с компонентом.

1. Есть архив C:\test.zip в котором содержится несколько файлов .doc, .txt. Имена файлов не постоянны.
2. Имена заранее не известны.
3. Я распаковываю архив в папку DirUnpack (C:\Folder)
C++
1
2
3
4
5
6
7
8
9
...
   String archive = "C:\\test.zip";
   String DirUnpack = "C:\\Folder"; // Можно рядом с программой, роли не имеет.
   ZipForge1->FileName = archive;
   ZipForge1->OpenArchive(fmOpenRead);
   ZipForge1->BaseDir = DirUnpack;
   ZipForge1->ExtractFiles("*.*");
   ZipForge1->CloseArchive();
...
4. Вопрос такой. После того как я распаковал архив в папку, мне нужно эти файлы .doc, .txt открыть в программе. Как мне это сделать не зная имени? Или как получить имена всех файлов из архива с последующим их открытием?

Спасибо.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
16.12.2012, 15:52  [ТС]
Делюсь решением...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TZFArchiveItem Archiveitem;
   ZipForge1->FileName = "text.zip";
   ZipForge1->BaseDir = "C:\\test\\"; // Папку можно указать рядом с программой
 
   try{
      ZipForge1->OpenArchive(fmOpenRead);
      if(ZipForge1->FindFirst("*.*" , Archiveitem, faAnyFile|faDirectory)){
         do{
            ZipForge1->ExtractFiles(Archiveitem.FileName); // Без этой строки первое имя в архиве не попадёт в список извлечения
            RichEdit1->Lines->Add(ZipForge1->BaseDir + Archiveitem.StoredPath + Archiveitem.FileName);
           } while(ZipForge1->FindNext(Archiveitem));
        }
     }
   catch(...){
      ZipForge1->CloseArchive();
     }
   ZipForge1->CloseArchive();
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2012, 15:52
Помогаю со студенческими работами здесь

Как распаковать zip архив в подпапке
Как распаковать zip архив в подпапке директории, т.е. на уровень ниже скрипта

Как распаковать архив (rar; zip; 7z)?
как программно распаковать архив? путь куда распаковывать архив находиться в текстовом поле. если в в папке, в которую будет распакован...

Как скачать и распаковать zip-архив
Мне необходимо написать такой php скрипт: по некоторой ссылке надо скачать архив zip, распаковать его в опредленное место, и прочитать...

Как распаковать ZIP архив и поместить содержимое в List<>
Есть ZIP архив с множеством файлов (текстовых(txt,html,htm,cs,cpp), и картинок(png,jpeg)) Как его распаковать и поместить содержимое в...

Как распаковать .zip архив с произвольным названием через php
Подскажите как распаковать .zip архив через php? Загвоздка в том что нужно одни пхп файлом распаковывать архивы с разным именем. Вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru