使用Lazarus中的zlibar将zip文件解压缩到TStream

时间:2012-07-23 07:19:31

标签: delphi zip pascal lazarus

我正在尝试使用Lazarus中的zlibar将zip文件从TMemoryStream提取到另一个TMemoryStream。据我所知,我的代码遵循here找到的示例。我正在使用一个简单的zip存档,其中包含一个文本文件。 zip存档是使用PowerArchiver创建的,没什么特别的。这是我的代码:

uses
  zlibar;
var
  z, Dest: TMemoryStream;
  unZip: TZLibReadArchive;     
begin
  z := TMemoryStream.Create;
  z.LoadFromFile('kov.zip');
  unZip := TZLibReadArchive.Create(z);
  UnZip.ExtractFileToStream(0, Dest);

我收到此错误:“ZLibError(2)损坏文件或文件类型不正确。”
请在此处查看zlibar.pas:https://dl.dropbox.com/u/8899944/files/zlibar.pas
任何想法为什么我收到此错误?感谢。

2 个答案:

答案 0 :(得分:3)

Zlibar库不读取zip文件。它读取和写入自定义存档格式。您可以说,因为zlibar.pas中描述的目录格式与the one used in zip files完全不同。

FreePascalArchivePackage链接看起来可能有一天会提供您想要的内容,尽管该页面最后一次在2007年发生了重大变化。

还有ZipFile包,似乎与Lazarus一起提供。

答案 1 :(得分:1)

快速猜测:尝试在z.Position := 0之前设置unZip := TZLibReadArchive.Create(z);