Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2019-03-04 11:37:41 ЛС | профиль | цитата
В теории - можно, но компонент предназначен для более элементарных вещей.
Точнее, формат GZIP имеет конкретную спецификацию и предназначен для сжатия одного файла. Поэтому линуксоиды для сжатия множества файлов сначала пакуют их в несжатый контейнер *.tar, затем этот файл подают на gzip, получая *.tar.gz - архив с одним файлом *.tar внутри.

Ты можешь сам попробовать реализовать это стандартными компонентами и работой со Stream в данном компоненте.

Открываешь конечный файл компонентом FileStream (1), с помощью DataToFile пишешь туда имя файла, сохраняешь отдельно текущую позицию в (1), увеличиваешь позицию (пропускаешь) на 4 байта (будущий размер сжатого файла). Потом открываешь вторым FileStream(2) сжимаемый файл и с помощью GZIP сжимаешь его в конечный поток (1). В конце компонент выдаёт размер записанного файла - возвращаешь позицию в потоке (1) на сохраненное раньше значение и пишешь размер.
Закрываешь поток (2), переходишь в конец потока (1) и повторяешь процесс для следующего файла.

Распаковка - открываешь контейнер, читаешь имя файла, читаешь размер, распаковываешь требуемое количество в отдельный файл с оригинальным именем.
карма: 26

0
Редактировалось 2 раз(а), последний 2019-03-14 14:07:16