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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.77
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
#1

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

11.09.2010, 19:18. Просмотров 5460. Ответов 12
Метки нет (Все метки)

Нужно распаковать все файлы из zip архива (или tar.gz).
Подключил zlib.
zip архив находится рядом с .exe файлом приложения.
Не могу найти функцию, которая делает это.. Если кто писал подобное, скиньте пожалуйста часть кода или ссылочку, где можно найти пример.
Спасибо всем


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

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

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

Как распаковать архив ZLib C++ - C++
Даже в документации офф. сайта, и в и примере ничего не понятно. Надо написать класс для распаковки zip архива на основе ZLib, с методом...

Как программно незаметно создать zip/rar архив и отправить на хост? - C++
C++(лучше C++/CLI). Например: моя программа на компьютере с именем пользователя "User01". Она берет файли из нужных мне папок и пакует в...

Распаковать строку - C++
Всем привет,имеется следующая строка на входе "2",на выходе должен получить "abcabc",вот еще пример: на входе "2]",а на выходе...

Как программно распаковать ISO (образ диска)? - C++
Как программно распаковать ISO (образ диска) с выбором того, что именно нужно распаковать, куда распокавать, нужно ли перезаписать и тд ?...

Распаковать беззнаковое целое число в четыре символа - C++
«Распаковать» беззнаковое целое число в четыре символа. Длина беззнакового целого равна 4. Помогите написать программу

Как распаковать из xlsx в xml с использованием zlib? - C++
Заранее благодарен за вашу любую помощь!

12
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 19:42 #2
так... по очереди...
кто "производит" .zip и .tar.gz файлы?

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

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

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

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

Цитата Сообщение от Kadet89 Посмотреть сообщение
Каждый кусок записываю в файл через ofs.write
поясни...
0
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 20:01  [ТС] #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(); // Закрываем файл
0
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 20:04 #6
Цитата Сообщение от Kadet89 Посмотреть сообщение
i = recv (s, buf, sizeof(buf)-1, 0); // Считываем из сокета. Максимум 300 байт. i вернет кол-во считанных байт
* * ofs.write(recvbuf, i); //Т.к. файл бинарный, символ '\0' не является концом строки. Записываем кол-во полученных байт.
сверь контрольные суммы для оригинального файла, и того, что записываешь локально.

Добавлено через 53 секунды
Цитата Сообщение от Kadet89 Посмотреть сообщение
Попробую, но не думаю что я смогу это сделать. Уже был неудачный опыт сборки
там все элементарно собирается. одной командой.
make -f win32/makefile.gcc
1
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 20:53  [ТС] #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 минут
Есть консольные версии архиваторов, может можно как-то через них?
0
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 21:08 #8
Цитата Сообщение от Kadet89 Посмотреть сообщение
Не получилось
у тебя компилятор установлен? какой?

Цитата Сообщение от Kadet89 Посмотреть сообщение
Есть консольные версии архиваторов, может можно как-то через них?
вариант. по окончанию скачивания, выполняй "system("zip ......")"
1
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
11.09.2010, 21:09  [ТС] #9
Закинуть рядом консольный экзешник архиватора и запускать его из приложения с определенными параметрами.
0
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2010, 21:10 #10
Цитата Сообщение от niXman Посмотреть сообщение
make -f win32/makefile.gcc
это командная строка для мингва.
для студии: nmake -f win32\makefile.msc
1
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
12.09.2010, 14:13  [ТС] #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 и заканчивая семеркой
0
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.09.2010, 14:16 #12
Цитата Сообщение от Kadet89 Посмотреть сообщение
вариант по окончанию скачивания выполнять system("unzip aaa.zip");
это самый простой способ.

Цитата Сообщение от Kadet89 Посмотреть сообщение
думаю не пройдёт на винде 2000 и более ранних.
не вижу причин не работать. во вторых - врядли у кого-то остались еще такие венды.
1
Kadet89
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
12.09.2010, 14:21  [ТС] #13
Всем спасибо, всё получилось, вот решение: http://www.codeproject.com/KB/cpp/ea...mpression.aspx Example 2
Надеюсь будет работать везде
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2010, 14:21
Привет! Вот еще темы с ответами:

Компиляция 7-zip - C++
добрый вечер! Подскажите, как компилировать 7-zip? Если можно поподробнее.

Работа с zip - C++
Хотелось бы сделать мини обработчик zip архивов для своих нужд, который бы редактировал все zip архивы что найдёт в папке. Ну из...

Работа с zip архивами - C++
Кто-нибудь знает хорошую библиотеку?

Создание ZIP архива - C++
Есть несколько xml файлов. Надо их засунуть в 1 архив. Есть-ли подходящая либа на плюсах? Про zlib знаю, но не очень бы хотелось писать...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
12.09.2010, 14:21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru