Delphi XE2 .Z Unix压缩文件库

时间:2012-06-06 09:17:07

标签: delphi zip

我需要管理.Z(Unix压缩)文件,主要是解压缩功能。 什么是最好的图书馆? 首选避免使用Dll(如7z.dll)。 编辑:今天我有一个解决方案,JCL压缩库连接到7z.dll。 我只是想寻找一个更轻的&简单的解决方案因为我只需要'.Z'去折叠函数。

1 个答案:

答案 0 :(得分:1)

要解压缩.Z文件我只使用Delphi XE2内置的ZLib库:

uses ...,ZLib;

procedure UnpackFiles;
var
  LList: TStringDynArray;
  I: Integer;
  FileName: String;
  DestFileName: String;
  LUnZip: TZDecompressionStream;
  LInput, LOutput: TFileStream;
begin
  LList:= TDirectory.GetFiles(ImportDir, '*.gz');
  for i:= 0 to Length(LList)-1 do
  begin
    FileName:= LowerCase(LList[i]);
    DestFileName:= ChangeFileExt(FileName, '.csv');
    { Create the Input, Output, and Decompressed streams. }
    LInput := TFileStream.Create(FileName, fmOpenRead);
    LOutput := TFileStream.Create(DestFileName, fmCreate);
    LUnZip := TZDecompressionStream.Create(LInput, 15+16); // 16 = read as gzip header !

    Log(Format('create uncompressed file %s', [DestFileName]));
    { Decompress data. }
    LOutput.CopyFrom(LUnZip, 0);

    { Free the streams. }
    LUnZip.Free;
    LInput.Free;
    LOutput.Free;
    Log(Format('Delete compressed file %s', [FileName]));
    DeleteFile(FileName);
  end;
end;

重要的是设置选项以读取gzip标头:

LUnZip := TZDecompressionStream.Create(LInput, 15+16); // 16 = read as gzip header !