Форум программистов, компьютерный форум CyberForum.ru

Распаковать zip архив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.77
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 19:18     Распаковать zip архив #1
Нужно распаковать все файлы из zip архива (или tar.gz).
Подключил zlib.
zip архив находится рядом с .exe файлом приложения.
Не могу найти функцию, которая делает это.. Если кто писал подобное, скиньте пожалуйста часть кода или ссылочку, где можно найти пример.
Спасибо всем


Нужно чтобы работало на win xp sp1, sp2, sp3, vista и windows 7

Добавлено через 1 час 38 минут
В яндексе и гугле вообще ничего.
Нашел только GZIP-упаковка/распаковка в памяти, что для меня несовсем приемлемо, т.е. архив может быть большого размера.

Архив, который мне необходимо распаковать, скачивается с сервера кусками по 300 килобайт, которые по мере поступления сразу записываются. Возможно ли поступающие куски архива tar.gz сразу распаковывать и записывать рядом с .exe файлом приложения?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2010, 19:18     Распаковать zip архив
Посмотрите здесь:

C++ Работа с zip-архивами.
C++ Работа с zip
C++ Создание ZIP архива
Как программно незаметно создать zip/rar архив и отправить на хост? C++
C++ Работа с zip архивами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 19:42     Распаковать zip архив #2
так... по очереди...
кто "производит" .zip и .tar.gz файлы?

Добавлено через 1 минуту
Цитата Сообщение от Kadet89 Посмотреть сообщение
кусками по 300 килобайт
откуда эти куски берутся?

Добавлено через 6 минут
свалил? лады...
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 19:46  [ТС]     Распаковать zip архив #3
Цитата Сообщение от niXman Посмотреть сообщение
так... по очереди...
кто "производит" .zip и .tar.gz файлы?
Производит программа WinRAR или 7z. Какой формат - zip или tar.gz мне без разницы, лишь бы работало, всмысле распаковывало рядом с приложением, с заменой всех файлов

Цитата Сообщение от niXman Посмотреть сообщение
откуда эти куски берутся?
Качаю с сайта. Считываю из сокета куски по 300 байт... вроде вверху ошибся, сказал 300 килобайт...
Каждый кусок записываю в файл через ofs.write

Цитата Сообщение от niXman Посмотреть сообщение
свалил? лады...
Захожу иногда
а в промежутках пока продолжаю искать решение
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 19:51     Распаковать zip архив #4
скачай исходники zlib`а. собири их. получится 2 exe`шника, 2 .а файла, 1 .dll файл.
запусти minigzip.exe(как-то так она зовется), и посмотри, корректно ли она распаковывает файлы. и отпишись. будем думать.

Цитата Сообщение от Kadet89 Посмотреть сообщение
Каждый кусок записываю в файл через ofs.write
поясни...
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 20:01  [ТС]     Распаковать zip архив #5
скачай исходники zlib`а. собири их. получится 2 exe`шника, 2 .а файла, 1 .dll файл.
запусти minigzip.exe(как-то так она зовется), и посмотри, корректно ли она распаковывает файлы. и отпишись. будем думать.
Попробую, но не думаю что я смогу это сделать. Уже был неудачный опыт сборки
Каждый кусок записываю в файл через ofs.write
поясни...
C++
1
2
3
4
5
6
ofs.open("file.tar.gz", std::ios::binary); // Открываем файл для добавления информации в конец файла.
while (i!=0) {
    i = recv (s, buf, sizeof(buf)-1, 0); // Считываем из сокета. Максимум 300 байт. i вернет кол-во считанных байт
    ofs.write(recvbuf, i); //Т.к. файл бинарный, символ '\0' не является концом строки. Записываем кол-во полученных байт.
}
ofs.close(); // Закрываем файл
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 20:04     Распаковать zip архив #6
Цитата Сообщение от Kadet89 Посмотреть сообщение
i = recv (s, buf, sizeof(buf)-1, 0); // Считываем из сокета. Максимум 300 байт. i вернет кол-во считанных байт
* * ofs.write(recvbuf, i); //Т.к. файл бинарный, символ '\0' не является концом строки. Записываем кол-во полученных байт.
сверь контрольные суммы для оригинального файла, и того, что записываешь локально.

Добавлено через 53 секунды
Цитата Сообщение от Kadet89 Посмотреть сообщение
Попробую, но не думаю что я смогу это сделать. Уже был неудачный опыт сборки
там все элементарно собирается. одной командой.
make -f win32/makefile.gcc
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 20:53  [ТС]     Распаковать zip архив #7
Да нет, со скачиванием файла у меня проблем нету. Он хорошо скачивается и сохраняется на винчестере. И без проблем распаковывается винраром.
Нужно чтобы само приложение во время скачивания или после него само распаковывало скачанный архив рядом с заменой всех файлов.

Добавлено через 37 минут
Не получилось, ввел:
C:\Documents and Settings\Admin>cd C:\zlib\win32

C:\zlib\win32>C:\GnuWin32\bin\make.exe make -f win32/makefile.gcc
make: win32/makefile.gcc: No such file or directory
make: *** ═хЄ яЁртшыр фы* ёсюЁъш Ўхыш `win32/makefile.gcc'. ╬ёЄрэют.

C:\zlib\win32>C:\GnuWin32\bin\make.exe make -f makefile.gcc
make: *** ═хЄ яЁртшыр фы* ёсюЁъш Ўхыш `make'. ╬ёЄрэют.
и ничего...

Добавлено через 10 минут
Есть консольные версии архиваторов, может можно как-то через них?
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 21:08     Распаковать zip архив #8
Цитата Сообщение от Kadet89 Посмотреть сообщение
Не получилось
у тебя компилятор установлен? какой?

Цитата Сообщение от Kadet89 Посмотреть сообщение
Есть консольные версии архиваторов, может можно как-то через них?
вариант. по окончанию скачивания, выполняй "system("zip ......")"
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 21:09  [ТС]     Распаковать zip архив #9
Закинуть рядом консольный экзешник архиватора и запускать его из приложения с определенными параметрами.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 21:10     Распаковать zip архив #10
Цитата Сообщение от niXman Посмотреть сообщение
make -f win32/makefile.gcc
это командная строка для мингва.
для студии: nmake -f win32\makefile.msc
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
12.09.2010, 14:13  [ТС]     Распаковать zip архив #11
Спасибо, завтра попробую.

--
Вот ещё нашел что-то http://gnuwin32.sourceforge.net/packages/unzip.htm

Добавлено через 16 часов 42 минуты
Как-то всё ничего не получается.
Нашел эту тему: http://www.codeproject.com/KB/cpp/ea...mpression.aspx
но пока не разобрался вообще, хотя говорят что работает.

Также нашел вот эту тему: http://www.codeproject.com/KB/files/zip_utils.aspx
С помощью неё удалось из zip архива, созданного винраром, вынуть один файл. И то при этом нужно знать его название.
Помогите сделать чтобы архив распаковывался рядом с приложением.
Могу прикрепить свой проект, который распаковывает это один файл.

вариант по окончанию скачивания выполнять system("unzip aaa.zip"); думаю не пройдёт на винде 2000 и более ранних.
Хочу чтобы работало на всех, начиная с 98 и заканчивая семеркой
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.09.2010, 14:16     Распаковать zip архив #12
Цитата Сообщение от Kadet89 Посмотреть сообщение
вариант по окончанию скачивания выполнять system("unzip aaa.zip");
это самый простой способ.

Цитата Сообщение от Kadet89 Посмотреть сообщение
думаю не пройдёт на винде 2000 и более ранних.
не вижу причин не работать. во вторых - врядли у кого-то остались еще такие венды.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2010, 14:21     Распаковать zip архив
Еще ссылки по теме:

Как распаковать архив ZLib C++ C++
C++ Как программно распаковать ISO (образ диска)?
Как распаковать из xlsx в xml с использованием zlib? C++

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

Или воспользуйтесь поиском по форуму:
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
12.09.2010, 14:21  [ТС]     Распаковать zip архив #13
Всем спасибо, всё получилось, вот решение: http://www.codeproject.com/KB/cpp/ea...mpression.aspx Example 2
Надеюсь будет работать везде
Yandex
Объявления
12.09.2010, 14:21     Распаковать zip архив
Ответ Создать тему
Опции темы

Текущее время: 19:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru