Ну, например, можно сделать финт ушами. Писать свой "честный" архиватор - как-то долго и сложно. Поэтому собственно для компрессии используем 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, выясняется его длинна, потом длинна и данные пишутся в файл.
Чтение - в обратном порядке. Считали длинну, скопировали полученное кол-во байт в декомпрессирующий поток, дальше вычитали результат в переменную.