Компонент для распаковки zip. Ма-а-а-аленький...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Wic_
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 23.01.2008 (Ср) 22:14

Компонент для распаковки zip. Ма-а-а-аленький...

Сообщение Wic_ » 14.04.2008 (Пн) 19:16

Помогите подобрать компонент для распаковки zip. Я знаю, что примеров в инете много, но как правило они старые и архивы распаковывают не все. Например ftp://ftp.drweb.com/pub/drweb/bases/drw44431.zip не распаковал ни один найденный мною. Остается вариант с консольным архиватором, но мне нужно небольшой размер инсталлятора и хотелось бы использовать компонент не более 100 кб. В общем буду рад любому совету.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 14.04.2008 (Пн) 20:15

zlib.dll - упаковка и распаковка ZIP архивов. Минимальный размер этой DLL - 28 кбайт

Wic_
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 23.01.2008 (Ср) 22:14

Сообщение Wic_ » 14.04.2008 (Пн) 21:31

Сейчас пытался найти пример для zlib - не нашел. Может кто поделится? Или может еще какие библиотеки подскажите, с примерами желательно.

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 15.04.2008 (Вт) 1:47

Wic_, вот пример, но для zlibwapi.dll. Т.к. для нее меньше проблем с использованием в ВБ.

Код: Выделить всё
Private Declare Function compress2 _
                Lib "zlibwapi.dll" (ByVal dest As String, _
                                    destLen As Long, _
                                    ByVal source As String, _
                                    ByVal sourceLen As Long, _
                                    ByVal Level As Long) As Long
Private Declare Function compressBound _
                Lib "zlibwapi.dll" (ByVal sourceLen As Long) As Long
Private Declare Function uncompress _
                Lib "zlibwapi.dll" (dest As Any, _
                                    destLen As Any, _
                                    src As Any, _
                                    ByVal srcLen As Long) As Long
Private Declare Function uncompressBound _
                Lib "zlibwapi.dll" (ByVal sourceLen As Long) As Long
Private Declare Function zuncompressstr _
                Lib "zlibwapi.dll" (ByVal dest As String, _
                                    destLen As Long, _
                                    ByVal source As String, _
                                    ByVal sourceLen As Long) As Long
Private Const Z_NO_FLUSH As Long = 0&
Private Const Z_PARTIAL_FLUSH As Long = 1&
Private Const Z_SYNC_FLUSH As Long = 2&
Private Const Z_FULL_FLUSH As Long = 3&
Private Const Z_FINISH As Long = 4&
Private Const Z_BLOCK As Long = 5&
Private Const Z_OK As Long = 0&
Private Const Z_STREAM_END As Long = 1&
Private Const Z_NEED_DICT As Long = 2&
Private Const Z_ERRNO As Long = -1&
Private Const Z_STREAM_ERROR As Long = -2&
Private Const Z_DATA_ERROR As Long = -3&
Private Const Z_MEM_ERROR As Long = -4&
Private Const Z_BUF_ERROR As Long = -5&
Private Const Z_VERSION_ERROR As Long = -6&
Private Const Z_NO_COMPRESSION As Long = 0&
Private Const Z_BEST_SPEED As Long = 1&
Private Const Z_BEST_COMPRESSION As Long = 9&
Private Const Z_DEFAULT_COMPRESSION As Long = -1&
Private Const Z_FILTERED As Long = 1&
Private Const Z_HUFFMAN_ONLY As Long = 2&
Private Const Z_RLE As Long = 3&
Private Const Z_DEFAULT_STRATEGY As Long = 0&
Private Const Z_BINARY As Long = 0&
Private Const Z_ASCII As Long = 1&
Private Const Z_UNKNOWN As Long = 2&
Private Const Z_DEFLATED As Long = 8&
Private Const ZLIB_VERSION As String = "1.2.1"
Public Function Compress(Data As String) As String
    Dim Output As String, OutputLength As Long
    OutputLength = compressBound(Len(Data))
    Output = Space(OutputLength)
    Debug.Assert compress2(Output, OutputLength, Data, Len(Data), Z_BEST_COMPRESSION) = Z_OK
    Compress = Left$(Output, OutputLength)
End Function
' OrigSize - длина строки до сжатия
Public Function DecompressString(TheString As String, _
                                 OrigSize As Long) As Long
    'Allocate string space
    Dim CmpSize As Long
    Dim TBuff As String
    Dim result As Long
    TBuff = String(OrigSize + (OrigSize * 0.01) + 12, 0)
    CmpSize = Len(TBuff)
    'Decompress
    result = uncompress(ByVal TBuff, CmpSize, ByVal TheString, Len(TheString))
    'Make string the size of the uncompressed string
    TheString = Left$(TBuff, CmpSize)
    'Reset properties
    If result = 0 Then
        'CompressedSize = 0
        OrigSize = 0
    End If
    'Return error code (if any)
    DecompressString = result
End Function
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Wic_
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 23.01.2008 (Ср) 22:14

Сообщение Wic_ » 15.04.2008 (Вт) 18:13

Matew
Спасибо, но в качестве ликбеза на могли пояснить: достаточно ли положить dll в папку с прогой, или нужно в system32? Нужно ее как то подключать? И самое главное - какой код при вызове функций. Я конечно понимаю, что это базовые знания, но не знаю к сожалению...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 16.04.2008 (Ср) 5:13

Достаточно положить в папкус программой, подключать не нужно. Мой пример только для строк.
Алгоритм:
Код: Выделить всё
' сжатие
ДлинаСтрокиДоСжатия = Len(твояСтрока)
будетСжатаястрока =  Compress(твояСтрока)
' расжатие
СжатаяСтрока = будетСжатаястрока
DecompressString(СжатаяСтрока, ДлинаСтрокиДоСжатия)
РасжатаяВновьСтрока = СжатаяСтрока

:)
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.04.2008 (Ср) 8:40

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wic_
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 23.01.2008 (Ср) 22:14

Сообщение Wic_ » 16.04.2008 (Ср) 17:19

Matew а как файл распаковать нет примера? Хакер, что касается dll понял.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 84

    TopList