开发一个解压缩程序(100分)

  • 主题发起人 主题发起人 PLWang
  • 开始时间 开始时间
P

PLWang

Unregistered / Unconfirmed
GUEST, unregistred user!
现在要做个程序 把下载到的Z文件 自动解压缩 然后数据导入
是自己要开发这个Z解压缩的功能 不知道哪个控件合适 没有使用限制
 
VCLZip控件
 
用 Delphi 自带的 ZLib 即可。
 
D6里带ZLib了吗 在哪一栏控件里? 它支持Z压缩格式吗 VCLZip不支持
 
ZLib 不是控件,是一个含压缩函数的单元,用 CompressBuf 和 DecompressBuf 进行压缩和解压缩。是否支持Z格式就不清楚了,你试试。
 
只有 dcu文件,引用 zlib单元即可使用
 
用Delphi自带的 ZLib,网上的事例有的,找一下,前两天我也做了一个
 
var
zStream : TDecompressionStream;
inStream,outStream : TFileStream;
Buf : array[0..4095] of Byte;
Count : DWord;
begin
try
inStream := TFileStream.Create('D:/record/rec_20060423.zip', fmOpenRead);
inStream.Read(size, SizeOf(Cardinal));

outStream := TFileStream.Create('D:/record/rec_20060423.txt', fmCreate);
zStream := TDecompressionStream.Create(inStream);

Count:= 1;
While Count > 0 do begin
Count:= zStream.Read(Buf, sizeof(Buf));
outStream.Write(Buf, Count);
end;
Finally
zStream.Free;
outStream.Free;
inStream.Free;
end;

上面的代码是根据csdn上找到的一段BCB的代码改过来的 但是一直无法执行
to yourwcd: 看看这段代码有什么问题
 
使用的是ZLib
 
据说z和zip是两种不同的压缩格式 有谁知道哪个控件支持Z格式解压缩?
 
我用ZIPTV这个好使,我写的下小说的程序就是用它完成解压,自动清除HTML标记,然后再合并成一个文本文件
它支持10多种压缩格式
 
to boy2002cn:
ZIPTV有使用限制吗
 
ziptv 6.32 支持 Gzip,zip,lha,rar,jar,cab,tar,ace,arc,arj,bh,tar,zoo 等格式,也不支持 z 格式。不知谁有新的版本,是否支持 z 格式。
 
ziptv 好像也不支持 z 格式。哪里有 z 格式压缩文件,我来试试。
 
uses zlib;
procedure Tform1.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,fmOpenRead);
try
{ the original filename }
s := ExtractFilename(Files);
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;

procedure Tform1.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;

你可以根据上述源码试试,我也是按照上面的内容改的,希望对你有帮助
 
有没有份呀,我发给演示程序给你
 
后退
顶部