procedure DecompressFiles(const Filename, DestDirectory: string; AFileList: TStringList);
var
dest, s: string;
decompr: TDecompressionStream;
infile, outfile: TFilestream;
i,c,l : integer;
// l: int64;
begin
dest := IncludeTrailingPathDelimiter(DestDirectory);
infile := TFileStream.Create(Filename, fmOpenRead);
try
{ 获取子文件数 }
infile.Read(c, SizeOf(c));
for i := 1 to c do
begin
{ 获取文件名长度和文件名 }
infile.Read(l, SizeOf(l));
SetLength(s, l);
infile.Read(s[1], l);
{ 获取文件大小 }
infile.Read(l, SizeOf(l));
{解压子文件并且存储 }
s := dest + s;
if AFileList <> nil then
begin
AFileList.Add(s);
end;
outfile := TFileStream.Create(s, fmCreate);
// decompr := TDecompressionStream.Create(infile);
try
// outfile.CopyFrom(decompr, l);
outfile.CopyFrom(infile,l);
finally
outfile.Free;
// decompr.Free;
end;
end;
finally
infile.Free;
end;
end;
var
dest, s: string;
decompr: TDecompressionStream;
infile, outfile: TFilestream;
i,c,l : integer;
// l: int64;
begin
dest := IncludeTrailingPathDelimiter(DestDirectory);
infile := TFileStream.Create(Filename, fmOpenRead);
try
{ 获取子文件数 }
infile.Read(c, SizeOf(c));
for i := 1 to c do
begin
{ 获取文件名长度和文件名 }
infile.Read(l, SizeOf(l));
SetLength(s, l);
infile.Read(s[1], l);
{ 获取文件大小 }
infile.Read(l, SizeOf(l));
{解压子文件并且存储 }
s := dest + s;
if AFileList <> nil then
begin
AFileList.Add(s);
end;
outfile := TFileStream.Create(s, fmCreate);
// decompr := TDecompressionStream.Create(infile);
try
// outfile.CopyFrom(decompr, l);
outfile.CopyFrom(infile,l);
finally
outfile.Free;
// decompr.Free;
end;
end;
finally
infile.Free;
end;
end;