Сжатие LZMA для VB6/VBA?

Глядя на сжатие LZMA зашифрованных файлов в моем приложении Access 2000. Кто-нибудь знает самый простой способ сделать это в VB6/VBA или знает какой-либо исходный код?


person Spidermain50    schedule 02.09.2011    source источник
comment
Хотя это и не LZMA, кажется, что deflate/gzip/zip (LZ77) должен быть довольно распространенным... или, возможно, библиотека, поддерживающая 7-Zip/bzip2 (LZMA)? FWIW, LZMA2 был представлен в 2009 году :-)   -  person    schedule 02.09.2011


Ответы (3)


Вы говорите, что хотите сжать зашифрованные файлы? Сжатие зашифрованных файлов обычно не приводит к значительной экономии места, поскольку процесс шифрования зашифровывает повторяющиеся структуры, над которыми работает сжатие. Итак, я предполагаю, что вы имеете в виду сжатие и шифрование файлов.

Существует 7-zip lzma SDK, но вам нужно скомпилировать код и работать как превратить его в Windows DLL или что-то, что вы можете использовать.

Я предлагаю вам просто отправить задачу в командную строку, т.е.

Sub test()
    Dim ProgramTaskID As Double
    ProgramTaskID = Shell("c:\compress.bat c:\source.txt c:\dest.zip", VbAppWinStyle.vbNormalFocus)
End Sub

Вам не нужно создавать пакетный файл для этого, вы можете указать команду напрямую. Функция Shell вернется, как только программа запустится, поэтому вам нужно будет подождать и проверить, появится ли выходной файл, прежде чем пытаться что-либо с ним делать.

7-zip бесплатен и предоставляет синтаксис командной строки, который вы можете использовать.

person Stephen Turner    schedule 04.12.2011

Это не бесплатно и функционально может быть излишним (хотя вы упомянули шифрование в своем вопросе ;-):

CryptoSys — Покупка

CryptoSys — Возможности

Возможно, одной из важных особенностей CryptoSys является то, что он поддерживает несколько языков/платформ разработки, а не только VB6 и VBA.

person Yarik    schedule 03.11.2011

Как и в ответе Степена Тернера, вы можете использовать xz.exe со страницы XZ Utils (см. раздел Windows).

Тогда код будет выглядеть так:

Sub LzmaCompression()
    Dim ProgramTaskID As Double
    ProgramTaskID = Shell("xz.exe --format=lzma test.txt", VbAppWinStyle.vbNormalFocus)
End Sub
person DecimalTurn    schedule 26.07.2020