Вверх ↑
Этот топик читают: Гость
Ответов: 233
Рейтинг: 12
#16: 2019-03-03 00:26:42 ЛС | профиль | цитата
Netspirit, А возможно сделать на твоем компонете запаковку множества файлов с их начальными именами?
карма: 2

0
Ответов: 4654
Рейтинг: 760
#17: 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) и повторяешь процесс для следующего файла.

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

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

0
Ответов: 9906
Рейтинг: 351
#18: 2019-03-05 11:29:16 ЛС | профиль | цитата
Netspirit писал(а):
Открываешь конечный файл компонентом FileStream (1), с помощью DataToFile пишешь туда имя файла, сохраняешь отдельно текущую позицию в (1), увеличиваешь позицию (пропускаешь) на 4 байта (будущий размер сжатого файла). Потом открываешь вторым FileStream(2) сжимаемый файл и с помощью GZIP сжимаешь его в конечный поток (1). В конце компонент выдаёт размер записанного файла - возвращаешь позицию в потоке (1) на сохраненное раньше значение и пишешь размер.
Закрываешь поток (2), переходишь в конец потока (1) и повторяешь процесс для следующего файла

Офигеть
карма: 9

0
Ответов: 4654
Рейтинг: 760
#19: 2019-03-05 11:34:41 ЛС | профиль | цитата
Galkov, никак не могу угадать что бы этот возглас значил...

Редактировалось 1 раз(а), последний 2019-03-05 11:34:59
карма: 26

0
Ответов: 9906
Рейтинг: 351
#20: 2019-03-05 12:34:32 ЛС | профиль | цитата
Сие означает, что: прочитавши три раза, я так и не уверен что все правильно понял.

Хотя, казалось бы, говорится о простой последовательности записей: dtAnsiString — dtPString — dtAnsiString — dtPString ...
Таки - простота признак таланта. Как нас учили когда-то.
карма: 9

0
Ответов: 4654
Рейтинг: 760
#21: 2019-03-05 12:45:48 ЛС | профиль | цитата
А где там расположение сжатых файлов и как узнать их размер для последующей распаковки?
карма: 26

0
Ответов: 9906
Рейтинг: 351
#22: 2019-03-05 13:00:44 ЛС | профиль | цитата
Netspirit, ты прикалываешься что ли ....

Редактировалось 1 раз(а), последний 2019-03-05 13:01:22
карма: 9

0
Ответов: 4654
Рейтинг: 760
#23: 2019-03-05 13:20:49 ЛС | профиль | цитата
Нет.
Сейчас я вспомнил про dtPString c 4-байтным префиксом, но я не поклонник конвертировать большие файлы в строки (тем более, в случае распаковки, когда конечный размер буфера неизвестен - присутствуют дополнительные перевыделения памяти). И да, с упаковкой понятно. А при распаковке - считать dtPString в строку, распаковать, сконвертировать её в Stream, сделать doCopyFromStream? (Потому как наш DataToFile до сих пор не умеет записать в файл строку без всяких префиксов/окончаний).

Редактировалось 8 раз(а), последний 2019-03-05 14:36:03
карма: 26

0
Ответов: 4654
Рейтинг: 760
#24: 2019-03-06 12:56:08 ЛС | профиль | цитата
Обновил компонент:
- исправил ошибки при работе с потоками и файлами
- добавил примеры упаковки и распаковки множества файлов в один


При открытии примеров может предупреждать об отсутствии точки/свойства в FileStream - не обращайте внимания, использовался модифицированный.
Примеры в т.ч. показывают общий пример работы с самодельными файловыми контейнерами. Можно GZIP в примерах заменить на последние обновленные EnCrypt/DeCrypt, или мои компоненты шифрования, имеющие аналогичные методы работы с потоками, и получить контейнер с шифрованными файлами.

Редактировалось 2 раз(а), последний 2019-03-06 12:57:53
карма: 26

0
Ответов: 207
Рейтинг: 14
#25: 2020-11-25 17:01:16 ЛС | профиль | цитата
Netspirit писал(а):
Если кому-то интересно, в архиве модифицированный файл KolZLib.pas для работы стандартного компилятора FPC через официальную zlib.dll

А на новом FPC GZIP не будет работать?

Редактировалось 2 раз(а), последний 2020-11-25 21:08:50
карма: 2

0
Ответов: 4654
Рейтинг: 760
#26: 2020-11-26 12:46:25 ЛС | профиль | цитата
Нужна доработка.
карма: 26

0
Ответов: 4654
Рейтинг: 760
#27: 2025-03-22 19:14:24 ЛС | профиль | цитата
Обновлен компонент - в папке "Unicode version" добавлен вариант для пакета нового FPC.
карма: 26

1
Голосовали:strannik_nebes
Ответов: 182
Рейтинг: 4
#28: 2025-03-24 15:53:44 ЛС | профиль | цитата
Netspirit, у меня не компилируется. Пример из архива
Подготовка к сборке проекта...
Генерация кода целевого языка
Компоновка проекта...
Command line: fpc.exe '"D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\GZip files.pas"' -Sd -Mdelphi '"-FED:\Soft\GZIP v1.1 2019-03-06\GZIP v1.1\Example\"' '"-FUD:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\units"' -FDtools\ -CX -dF_P
Free Pascal Compiler version 1.9.6 [2004/12/31] for i386
Copyright (c) 1993-2004 by Florian Klaempfl
Target OS: Win32 for i386
Compiling D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\GZip files.pas
Compiling D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\hiMainForm_58C8790.pas
Compiling D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\hiButton.pas
Compiling D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\hiODialog.pas
Compiling D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\hiTrackBar.pas
hiTrackBar.pas(13,19) Note: Private field "THITrackBar.Track" is never used
hiTrackBar.pas(14,19) Note: Private field "THITrackBar.oldPos" is never used
Compiling resource D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\allres.res
Linking D:\Soft\Компоненты для Hiasm\GZIP v1.1 2019-03-06\GZIP v1.1\Example\GZip files.exe
GZip files.pas(19,1) Error: Error while linking
Closing script D:\Soft\GZIP v1.2 2019-03-06\GZIP v1.2\Example\ppas.bat
Error: D:\Soft\HiAsm 4 AltBuild\compiler\fpc\ppc386.exe returned an error exitcode (normal if you did not specifiy a source file to be compiled)
D:\Soft\HiAsm 4 AltBuild\Elements\delphi\code\ZLibObj\deflate.obj: file not recognized: File format not recognized
Сборка завершена.
deflate.obj ему не нравится. Тут, вроде как, решение написано http://www.freepascal.ru/forum/viewtopic.php?f=13&t=6536&start=15

Редактировалось 3 раз(а), последний 2025-03-24 16:02:54
карма: 1

0
Ответов: 4654
Рейтинг: 760
#29: 2025-03-24 20:29:48 ЛС | профиль | цитата
Старый компилятор. Выбери новые.
карма: 26

0
29
Сообщение
...
Прикрепленные файлы
(файлы не залиты)