Delphi 获取Zip文件中文件的解压缩流

Delphi 获取Zip文件中文件的解压缩流,delphi,zip,Delphi,Zip,背景:我正在处理一些压缩的日志文件(我正在将日志详细信息插入数据库)。日志文件的大小有很多GB,如果能够在不将其解压缩到磁盘的情况下处理文件(zip文件只有几百MB),那就太好了。我将其用于提取的日志文件(使用TStreamReader) 我想做的是为zip文件中的一个文件获取某种类型的解压缩流,并使用该流处理日志文件,而不必将整个文件解压缩到磁盘。解压缩流需要支持大于4GB的文件 system.zip中的TZipFile看起来它支持这一点,但我无法让它工作-可能是因为它只支持32位文件大小,而

背景:我正在处理一些压缩的日志文件(我正在将日志详细信息插入数据库)。日志文件的大小有很多GB,如果能够在不将其解压缩到磁盘的情况下处理文件(zip文件只有几百MB),那就太好了。我将其用于提取的日志文件(使用
TStreamReader

我想做的是为zip文件中的一个文件获取某种类型的解压缩流,并使用该流处理日志文件,而不必将整个文件解压缩到磁盘。解压缩流需要支持大于4GB的文件

system.zip中的
TZipFile
看起来它支持这一点,但我无法让它工作-可能是因为它只支持32位文件大小,而我处理的文件比这大。我也安装了abbrevia,但看不到任何允许我这么做的东西


我在这个项目中使用DelphiXe7。请注意,我不想将zip文件解压缩到流中(这些文件有很多GB,并且没有足够的物理内存),而是获取实际的解压缩流。

我在System.zip中使用了标准的TZipFile,并检查了内部文件是否大于4GB—大致相当

VAR
  zipStream       : TStream;
  LocalHeader     : TZipHeader;
  StreamSize      : Int64;
  FileName        : string;
begin
//...
  Zip := TZipFile.Create;
  Zip.Open (FileName, TZipMode.zmRead);
  Zip.Read ('somefile.xml', zipStream, LocalHeader);
  StreamSize := LocalHeader.UncompressedSize;
  if StreamSize = MAXDWORD then
    ShowMessage ('File is too large, only the first 4GB will be processed'#10'To process entire file you must extract .xml file manually');
//process zipStream...
end;

虽然不完美,但仍然很有用

()@nolaspeaker谢谢,但是system.zip只支持4GB以下的文件。我目前正在这样做,但我会遇到一些大于4GB的日志文件的问题。这似乎是一个推荐问题。当我读到这个问题时,你正在要求一个支持zip64的库。我使用Google()找到了这个库