| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Архивация файлов с помощью zlib |
| Автор: Демидрол 13.1.2009, 12:24 |
| Доброе время суток всем. У меня есть задача:необходимо с помощью билдера заахивировать некоторые файлы. Билдер версии 6.0, поэтому втроенного архиватора прямо в билдер не имею. Нашел в сети zlib.lib, описание про неё - вроде то, что мне нужно, но...при её подключении получаю ошибку: [Linker Error] 'F:\PROJECT\ZLIBCOMPRESS\ZDLL.LIB' contains invalid OMF record, type 0x21 (possibly COFF) понимаю, что неподходит тип - билдеру нужен другой, т.е. нужно из OMF переделать в COFF, но как это сделать - не знаю.Помогите, пожалуйста. И если кто-нибудь занимался этой проблемой, то буду очень благодрен за прмер применения сей библиотеки. Заранее спасибо. |
| Автор: xvr 13.1.2009, 13:12 |
| Возьми сорцы с www.zlib.org и собери их под Builder, тогда и .lib будет правильный |
| Автор: Alexeis 13.1.2009, 14:05 | ||
Демидрол, так есть же VCL овский TCompressionStream/TDecompressionStream
Добавлено через 1 минуту и 1 секунду P.S. TCompressionStream/TDecompressionStream - это по сути обертка над zlib, потому формат тот же. |
| Автор: xvr 13.1.2009, 15:47 | ||
Нету, у него BCB 6.0. ZLib.hpp появился только в BDS 200? (наверное 2006) |
| Автор: orthrus 13.1.2009, 17:01 | ||||
Значит на офф. сайте скачиваешь http://www.zlib.net/zlib-1.2.3.tar.gz, распаковываешь например на диск С:. Открываешь cmd.exe, заходишь в эту диру такой командой:
дальше набираешь команду следующего содержания:
должна произойти сборка либы |
| Автор: Alexeis 13.1.2009, 17:06 | ||
Можно загрузить Dll динамически при помощи LoadLibrary Добавлено @ 17:06 Кроме того есть тулза которая делает lib файл по имеющейся Dll. Implib кажется называется тулза. |
| Автор: Демидрол 13.1.2009, 17:39 | ||
А где команды набирать????? |
| Автор: orthrus 13.1.2009, 17:42 |
| Пуск->Выполнить->Ввести cmd и нажать ОК, откроется текстовая консоль там и вводить |
| Автор: Демидрол 13.1.2009, 18:01 |
| orthrus, ОООООООО!!!!!!!!!!!!пасиба!!!!!!!Такие штуки научил делать........оооооооооооооо!!!!!!!!!!Пасиба!!!!!!!!!! |
| Автор: Dem_max 13.1.2009, 19:33 | ||
http://forum.sources.ru/index.php?showtopic=84442&hl=contains,and,invalid,and,omf http://forum.sources.ru/index.php?showtopic=153041&hl=contains,and,invalid,and,omf COFF- формат мелкомягких, OMF - интеловский вроде но его использует борланд. |
| Автор: Демидрол 19.1.2009, 12:14 | ||||
| Поискал ещё в сети и нашл исходники, с помощью которых можно создавать zip-архивы.Но разобрался только, как архиировать отдельные файлы, а как запаковывать папки не понял, хотя распаковывается архив с папками нормально...Знаний, наверное, не хватает. Если кому-нибудь не сложно, помогите разобраться.Файлы добавлю к сообщени, если кому надо, а ниже приведу пример использования. Архивация:
Разархивация:
|
| Автор: Alexeis 19.1.2009, 12:20 |
| Демидрол, сам не пробовал, но по идее если указать относительные пути к файлам, т.е. "Folder\\file.ext" вместо имен "file1.rtf", то заархивируется как папка внутри архива. |
| Автор: mrbrooks 19.1.2009, 12:21 |
| Демидрол, глянь http://forum.vingrad.ru/forum/topic-84858/anchor-entry652493/0.html Тут дельфяцких дел мастер реализовал то что тебе нужно. |
| Автор: Демидрол 19.1.2009, 14:12 |
| Alexeis, понятно, если указывать путик файлам, то они запакуются))Я не знаю, а можно ли запаковать папку таким образом, чтобы указать только её название, например, "Folder"..... Добавлено через 3 минуты и 38 секунд mrbrooks, спасибо, но в том примере плотность сжатия невелика, 3% примерно, а мне надо именно сжимать файлы, то, что я нашол очень хорошо для этого, так как при тестировании дало хорошие результаты, только не могу понять, как папки архивироватьцеликом, а не отдельно по файлику архивировать содержимое.))) |
| Автор: Alexeis 19.1.2009, 14:44 | ||
Т.е. пустую паку? Теоретически да, поскольку папка это тоже файл. Но проверять нужно все. В данной конкретной реализации это может не работать. |
| Автор: Демидрол 19.1.2009, 14:57 |
| Alexeis, нет, я имею ввиду, что есть, допустим, папка и в ней содержится 10 файлов. И не могу понять, как загнать в архив папку целиком сразу, а не отдельно по файлу, таким образом, чтобы не делать 10 архивов, в каждом из которых будет по одному файлу из исходной папки, а чтобы был один архив, в котором лежит папка с десятью файлами.Как это сделасть отдельно по файлам я понимаю, а как сделать, чтобы просто указать название папки, я не знаю. |
| Автор: Alexeis 19.1.2009, 15:03 | ||||
Так просто добавлять файлы в один и тот же архив. Каждый файл с его относительным путем.
Такого может и не быть. Не вижу проблемы, обход дерева папок это типовой алгоритм. Только вот еще такой момент, если это zip, то у него вроде ANSI кодировка, потому могут быть траблы с порчей имен папок в которых есть названия на языке отличном от английского, и там еще ограничение на максимальную длину пути, т.е. могут быть проблемы с именами сохранных веб страниц или при глубокой вложенности. |
| Автор: xvr 19.1.2009, 15:11 | ||
ZipAddFolder |
| Автор: Демидрол 19.1.2009, 15:23 | ||
| xvr, это я знаю.НО!!!!Эта функция просто в архиве создает пустую папку, в которую можно будет копировать. Вот так в архив добавляется существующий файл и пустая папка:
|