Member 13803981 Ответов: 1

Как использовать базовую библиотеку сжатия (BCL) для сжатия файлов


Вот что говорится в руководстве:
Syntax:
 
outsize = Huffman_Compress(in,out,insize)
 
outsize Size of output buffer after compression
in Pointer to the input buffer (uncompressed data)
out Pointer to the output buffer (compressed data)
insize Size of input buffer
The output buffer must be able to hold insize × 101
100 + 320 bytes.


Но что на самом деле я должен делать, если у меня есть только имя файла для сжатия?

Что я уже пробовал:

Я понятия не имею, с чего начать.
Я сам написал алгоритм Хаффмана и использовал строку для сохранения данных из файла, а затем он был использован для алгоритма.
Я искал в google несколько примеров использования BCL, но ничего не нашел

1 Ответов

Рейтинг:
0

Rick York

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


Member 13803981

У меня есть проблема с буферами, кажется, это нормально после сжатия(но все же у меня есть вопросы к размеру буфера, почему он должен быть таким, как в формуле выше), у меня просто есть файл почти в 2 раза меньше и некоторые символы внутри. Но после декомпрессии выходной файл никогда не равен оригиналу - проблема в том, что мне нужен размер выходного буфера для декомпрессии, но нет никаких предложений, насколько он должен быть большим, я попытался вручную найти лучшее число, но мне нужно сжать любые файлы, и размер должен вычисляться автоматически. Есть то, что руководство говорит о декомпрессии:
in указатель на входной буфер (сжатые данные)// char * from file
out указатель на выходной буфер (несжатые данные) // unsigned char *out
insize размер буфера ввода //в = GetFileSize(файл);
outsize размер выходного буфера //???
Выходной буфер должен быть способен удерживать байты большого размера. Я могу работать только с текстовыми файлами wirh, потому что я могу читать только их после этой "декомпрессии"

Rick York

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

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

Member 13803981

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