WriteBinaryStream 压缩到 INI 文件?
WriteBinaryStream compressed to INI file?
在 Delphi 10.4 中,我尝试将有效的 TPicture compressed 保存到 INI 文件中,尝试从文档中复制 ZLibCompressDecompress example:
procedure TForm1.SavePictureToIniFile(const APicture: TPicture);
//
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 文件仅包含以下行:
[Custom]
IMG=
那么如何将压缩后的流保存到INI文件中呢?
您需要在LZip.CopyFrom
行LOutput.Position := 0
之后设置,即立即在之前
MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);
在 Delphi 10.4 中,我尝试将有效的 TPicture compressed 保存到 INI 文件中,尝试从文档中复制 ZLibCompressDecompress example:
procedure TForm1.SavePictureToIniFile(const APicture: TPicture);
//
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 文件仅包含以下行:
[Custom]
IMG=
那么如何将压缩后的流保存到INI文件中呢?
您需要在LZip.CopyFrom
行LOutput.Position := 0
之后设置,即立即在之前
MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);