2

在 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 文件中呢?

4

1 回答 1

2

需要在行LOutput.Position := 0 设置LZip.CopyFrom,即紧接在前

MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);
于 2020-08-02T14:41:03.097 回答