Показать сообщение отдельно
  #4  
Старый 09.07.2016, 04:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, например, можно сделать финт ушами. Писать свой "честный" архиватор - как-то долго и сложно. Поэтому собственно для компрессии используем ZLib (TCompressStream, если правильно помню имя). Далее есть варианты. Можно отдельно компрессировать каждую запись. Тогда структура файла должна быть примерно такой:
Код:
MYZIP - 5 char file signature
NumberOfElements - 4 byte integer
Element 1 length - 4 byte integer
Element 1 data - raw data
...
Element n length - 4 byte integer
Element n data - raw data
Каждый элемент с помощью компрессирующего потока пишется в TMemoryStrteam, выясняется его длинна, потом длинна и данные пишутся в файл.
Чтение - в обратном порядке. Считали длинну, скопировали полученное кол-во байт в декомпрессирующий поток, дальше вычитали результат в переменную.
Ответить с цитированием