Данные усекаются с помощью TZCompressionStream - PullRequest
1 голос
/ 20 января 2012

У меня есть следующие объявления:

stmCompressor: TZCompressionStream;
stmCompressed: TMemoryStream;
stmBlob: TStream;

У меня есть следующий код:

stmBlob := qry.CreateBlobStream(qry.FieldByName(sFieldName), bmRead);
stmCompressed := TMemoryStream.Create;
stmCompressor := TZCompressionStream.Create(stmCompressed); 
stmBlob.Position := 0;
stmCompressor.CopyFrom(stmBlob, stmBlob.Size);
stmCompressed.Position := 0;
stmCompressed.SaveToFile('C:\Temp\CompressedData2.zip');

Я пытаюсь сжать данные изображения из базы данных и поместить результат в памятьпоток stmCompressed.Затем я сохраняю stmCompressed в файл, чтобы я мог проверить результат.Результат выглядит как усеченная форма того, чем он должен быть.Если сжатые данные больше 80000H, то файл усекается до этого размера.Если данные больше, чем B0000H, то файл усекается до этого размера.

Самое смешное, что если я заменю stmCompressed с TMemoryStream на TFileStream, то он работает отлично (код не совсем такой жеЯ могу опубликовать его, если это поможет).

Мне нужен результат в потоке памяти, поэтому я был бы признателен за любую помощь, которую может предложить любой.Я использую стандартную библиотеку ZLib, которая поставляется с XE2.

Спасибо.

1 Ответ

3 голосов
/ 20 января 2012

Вы должны освободить TZCompressionStream, чтобы сбросить оставшиеся байты в поток памяти.

...