delphi Zip文件的内存中压缩

0lvr5msh  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(204)

我想将文件压缩到Zip内存中(我将把结果存储在数据库中,而不是在文件系统中创建文件)。
我如何读取压缩的Zip文件的原始内容?。我看不到任何属性来读取该内容,也看不到任何方法来将该内容保存到流或任何其他内存结构中。

function GetZip(UncompressedFile: TStream): TBytes; 
var AZipFile: TZipFile;
begin
  AZipFile := TZipFile.Create;
  try
    AZipFile.Add(UncompressedFile);
    Result := AZipFile.Data;  // ?? How to get the compressed file without saving it to the file system ??
  finally
    AZipfile.Free;
  end;
end;
  • 谢谢-谢谢
t2a7ltrp

t2a7ltrp1#

感谢AmigoJack和雷米Lebeau让我知道我可以使用Zip输入流来获得结果。
这样做效果很好:

function Zip_AddFile(FileToAdd: TStream; Title: string): TBytes; overload; 
begin
   Result := Zip_AddFile([], FileToAdd, Title);
end;

function Zip_AddFile(Zip: TBytes; FileToAdd: TStream; Title: string): TBytes; overload;
var AZipFile: TZipFile;
    ZipStream: TBytesStream;
begin
  ZipStream := TBytesStream.Create(Zip);
  AZipFile := TZipFile.Create;
  try
    AZipFile.Open(ZipStream, zmReadWrite);
    AZipFile.Add(FileToAdd, Title);
    AZipFile.Close;
    Result := ZipStream.Bytes;
  finally
    AZipfile.Free;
    ZipStream.Free;
  end;
end;

相关问题