请问zlib压缩文件问题,(100分)

  • 主题发起人 主题发起人 caichendao
  • 开始时间 开始时间
C

caichendao

Unregistered / Unconfirmed
GUEST, unregistred user!
我用zlib这个来压缩文件(txt,xml等这些文件),不注重压缩比例,普通压缩就可以啦,
我用的是delphi7.要怎样写代码?不了解zlib,请指教.(我只想压缩成zip就可以啦)
不想用第三方控件
 
你参考这点代码吧,以前自己用的。
现在我使用vclzip了。
如果你不使用控件,你可以使用。
unit my1;

interface
uses zlib,Classes,SysUtils;

procedure myCompress(filename:string);
procedure myUnCompress(const s_filename:string );

implementation

procedure myCompress(filename:string);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
CompressedStream: TMemoryStream;
Begin
CompressedStream := TMemoryStream.Create;
CompressedStream.LoadFromFile(filename);
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear;
CompressedStream.WriteBuffer(Count, SizeOf(Count));
CompressedStream.CopyFrom(DestStream, 0);
CompressedStream.SaveToFile(filename);
finally
DestStream.Free;
CompressedStream.Free;
end;
end;

procedure myUnCompress(const s_filename:string );
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
CompressedStream: TMemoryStream;
Begin

CompressedStream :=TMemoryStream.Create;
CompressedStream.LoadFromFile(s_filename);
CompressedStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
Try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;//复位流指针
DestStream.SaveToFile(s_filename);
finally
FreeMem(Buffer);
DestStream.Free;
CompressedStream.Free;
end;
end;
end.
 
我用过ZipTV,一装就全部代码用不了,
就是例如memo.lines这个,装了之后一按"."下面提视说找不到XXX文件,
 
CompressedStream.LoadFromFile(filename);
CompressedStream.SaveToFile(filename);
这两个filename是一样的地址文件名?
 
写到 Count := CompressedStream.Size;时,写count:=compressedstream.之后就出现下面的错误
[Pascal Error] Unit1.pas(1): Unable to invoke Code Completion due to errors in source code什么意思阿?
 
这点代码是我以前程序使用的。应该没有问题。版本是D7
 
运行后不见zip文件的??
我把你的调用函数写在按扭那里,把filename给文件路与文件名,
这两个filename是一样的地址文件名? 我看不到存放zip的路径与文件名的??
解压的函数我没有写,只写上压缩的函数
CompressedStream.LoadFromFile('c:/aa.txt');
CompressedStream.SaveToFile('c:/aa.txt');后发觉txt里面的数据变乱码,是什么原因啦?
 
接受答案了.
 
后退
顶部