procedure DecompressFiles(const Filename, DestDirectory : String);
var
dest,s : String;
decompr : TDecompressionStream;
infile, outfile : TFilestream;
i,l,c : Integer;
begin
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;
备份压缩一个文件夹数据表后,恢复不成功。请问以上代码有什么问题? 还是压缩文件有问题?
恢复时提示有一个文件不能create,以后全部文件都没有恢复。
var
dest,s : String;
decompr : TDecompressionStream;
infile, outfile : TFilestream;
i,l,c : Integer;
begin
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;
备份压缩一个文件夹数据表后,恢复不成功。请问以上代码有什么问题? 还是压缩文件有问题?
恢复时提示有一个文件不能create,以后全部文件都没有恢复。
procedure UnCompressStream( var memStream: TMemoryStream );
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
Begin
memStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(memStream); Try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;
memStream.Clear ;
memStream.CopyFrom(DestStream, 0) ;
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;procedure CompressStream(var memStream: TMemoryStream; const CompressionLevel: TCompressionLevel=clMax);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := memStream.Size;
DestStream := TMemoryStream.Create;
SourceStream := TCompressionStream.Create( CompressionLevel, DestStream );
Try
memStream.SaveToStream(SourceStream);
// SourceStream.SaveToStream(SourceStream);
SourceStream.Free;
memStream.Clear;
memStream.WriteBuffer(Count, SizeOf(Count));
memStream.CopyFrom(DestStream, 0);
memStream.Position := 0 ;
finally
DestStream.Free;
end;
end;
var
meostream :TMemoryStream;meostream := Tmemorystream.create;
try
meostream.loadfromfile(filename);
CompressStream(meostream); //使用压缩方法压缩该流
meostream.savetofile(zipfilename); //存为压缩文件名
finally
meostream.free;
end;解压相反