В Delphi 10.4 я пытаюсь сохранить действительный TPicture, сжатый, в файл INI, пытаясь воспроизвести пример ZLibCompressDecompress из документации:
procedure TForm1.SavePictureToIniFile(const APicture: TPicture);
// https://stackoverflow.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?
try..finally
для каждого ресурса: тогда вы не сможете ошибиться в порядке!) - person Andreas Rejbrand   schedule 02.08.2020