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);
Другие вопросы по тегам