代码之家  ›  专栏  ›  技术社区  ›  Alister

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

  •  -1
  • Alister  · 技术社区  · 6 年前

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

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

    TZipFile 在里面 system.zip

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alister    6 年前

    我同意在中使用标准TZipFile系统.Zip并检查内部文件是否大于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;
    

    不完美,但仍然有用