如何将zip中的制定文件释放到指定目录?

tianjin 2006-04-15 02:19:29
如何将zip中的指定件释放到指定目录?
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jcxhan 2006-04-15
  • 打赏
  • 举报
回复
//将目录a下的4个文件压缩到文件5.zlb
program compress;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes, Zlib;

procedure CompressFiles(Files : TStrings; const Filename : String);
var
infile, outfile, tmpFile : TFileStream;
compr : TCompressionStream;
i, l : Integer;
s : String;
begin
if Files.Count > 0 then
begin
outFile := TFileStream.Create(Filename, fmCreate);
try
{ the number of files }
l := Files.Count;
outFile.Write(l, SizeOf(l));
for i := 0 to Files.Count-1 do
begin
infile := TFileStream.Create(Files[i], fmOpenRead);
try
{ the original filename }
s := ExtractFilename(Files[i]);
l := Length(s);
outfile.Write(l, SizeOf(l));
outfile.Write(s[1], l);
{ the original filesize }
l := infile.Size;
outfile.Write(l, SizeOf(l));
{ compress and store the file temporary}
tmpFile := TFileStream.Create('tmp', fmCreate);
compr := TCompressionStream.Create(clMax, tmpfile);
try
compr.CopyFrom(infile, l);
finally
compr.Free;
tmpFile.Free;
end;
{ append the compressed file to the destination file }
tmpFile := TFileStream.Create('tmp', fmOpenRead);
try
outfile.CopyFrom(tmpFile, 0);
finally
tmpFile.Free;
end;
finally
infile.Free;
end;
end;
finally
outfile.Free;
end;
DeleteFile('tmp');
end;
end;

var
Files: TStrings;
begin
{ TODO -oUser -cConsole Main : Insert code here }
Files:=TStringList.Create;
Files.Add('a\1.txt');
Files.Add('a\2.exe');
Files.Add('a\3.doc');
Files.Add('a\4.dll');
CompressFiles(Files, 'a\5.zlb');
Files.Free;
end.

------------------------------------------------------------------------------------

//将目录a下的文件5.zlb解压到目录a
program decompress;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes, Zlib;

procedure DecompressFiles(const Filename, DestDirectory : String);
var
dest, s : String;
decompr : TDecompressionStream;
infile, outfile : TFilestream;
i, l, c : Integer;
begin
//IncludeTrailingPathDelimiter (D6/D7 only)
dest := IncludeTrailingPathDelimiter(DestDirectory);
infile := TFileStream.Create(Filename, fmOpenRead);
try
{ number of files }
infile.Read(c, SizeOf(c));
for i := 1 to c do
begin
{ read filename }
infile.Read(l, SizeOf(l));
SetLength(s, l);
infile.Read(s[1], l);
{ read filesize }
infile.Read(l, SizeOf(l));
{ decompress the files and store it }
s := dest+s; //include the path
outfile := TFileStream.Create(s, fmCreate);
decompr := TDecompressionStream.Create(infile);
try
outfile.CopyFrom(decompr, l);
finally
outfile.Free;
decompr.Free;
end;
end;
finally
infile.Free;
end;
end;

begin
{ TODO -oUser -cConsole Main : Insert code here }
DecompressFiles('a\5.zlb', 'a');
end.
老之 2006-04-15
  • 打赏
  • 举报
回复
使用VCLZip第三方控件就很容易实现

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧