WriteBinaryStream сжат в файл INI?
В Delphi 10.4 я пытаюсь сохранить действительный TPicture, сжатый в файл INI, пытаясь воспроизвести пример ZLibCompressDecompress из документации:
procedure TForm1.SavePictureToIniFile(const APicture: TPicture);
// https://stackru.com/questions/63216011/tinifile-writebinarystream-creates-exception
var
LInput: TMemoryStream;
LOutput: TMemoryStream;
MyIni: System.IniFiles.TMemIniFile;
ThisFile: string;
LZip: TZCompressionStream;
begin
if FileSaveDialog1.Execute then
ThisFile := FileSaveDialog1.FileName
else EXIT;
LInput := TMemoryStream.Create;
LOutput := TMemoryStream.Create;
LZip := TZCompressionStream.Create(clDefault, LOutput);
try
APicture.SaveToStream(LInput);
LInput.Position := 0;
//LOutput.Position := 0;
LZip.CopyFrom(LInput, LInput.Size);
MyIni := TMemIniFile.Create(ThisFile);
try
MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);
MyIni.UpdateFile;
finally
MyIni.Free;
end;
finally
LInput.Free;
LOutput.Free;
LZip.Free;
end;
end;
Но поток не сохраняется в INI-файле. Результирующий INI-файл содержит только эти строки:
[Пользовательский]
IMG=
Итак, как мне сохранить сжатый поток в INI-файле?
1 ответ
Решение
Вам нужно установить LOutput.Position := 0
после того, какLZip.CopyFrom
строка, то есть непосредственно перед
MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);