⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitzipmodule.pas

📁 一个delphi下压缩成zip文件的例子
💻 PAS
字号:
unit UnitZipModule;

interface

uses
  SysUtils, Classes,ZLib;

type
  TDataModuleZip = class(TDataModule)
  private
    { Private declarations }
  public
    { Public declarations }
  procedure ZipFile(FileName,ZipFileName:String);
  procedure UnZipFile(FileName,ZipFileName:String);
  procedure CompressZip(var CompressedStream:TMemoryStream;const CompressionLevel: TCompressionLevel);
  procedure UnCompressZip(const CompressedStream:
        TFileStream; var CompressedStreamM: TMemoryStream);

  end;

var
  DataModuleZip: TDataModuleZip;

implementation

{$R *.dfm}
procedure TDataModuleZip.ZipFile(FileName,ZipFileName:String);
var
CompressedStream: TMemoryStream;
begin
Try
         //将压缩之后保存为自定义格式的文件
        CompressedStream:= TMemoryStream.Create;
        CompressedStream.LoadFromFile(FileName);
        //压缩文件
        CompressZip(CompressedStream,clDefault);
        CompressedStream.SaveToFile(ZipFileName);
  finally
        CompressedStream.Free;
  end;
end;

procedure TDataModuleZip.UnZipFile(FileName,ZipFileName:String);
var
CompressedStream: TFileStream;
CompressedStreamM: TMemoryStream;
Zip:TDataModuleZip;
begin
Try
 //将压缩之后保存为自定义格式的文件
CompressedStream := TFileStream.Create(ZipFileName,fmOpenRead);
CompressedStreamM := TMemoryStream.Create;
//解压文件
UnCompressZip(CompressedStream,CompressedStreamM);
CompressedStreamM.SaveToFile(FileName);
  finally
        CompressedStream.Free;
        CompressedStreamM.Free;
  end;
end;
//压缩文件
procedure TDataModuleZip.CompressZip(var CompressedStream:TMemoryStream;const CompressionLevel: TCompressionLevel);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
//SourceStream/中保存着原始的图像流
        CompressedStream.SaveToStream(SourceStream);
    //将原始进行压缩, DestStream中保存着压缩后流
        SourceStream.Free;
        CompressedStream.Clear;
        //写入原始的尺寸
        CompressedStream.WriteBuffer(Count, SizeOf(Count));
        //写入经过压缩的流
        CompressedStream.CopyFrom(DestStream, 0);
finally
        DestStream.Free;
end;
end;

//解压文件
procedure TDataModuleZip.UnCompressZip(const CompressedStream:
TFileStream; var CompressedStreamM: TMemoryStream);
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
Begin 
//从被压缩的文件流中读出原始文件的尺寸 
	CompressedStream.ReadBuffer(Count, SizeOf(Count));
//根据大小为将要读入的原始文件流分配内存块
        GetMem(Buffer, Count);
        DestStream := TMemoryStream.Create;
        SourceStream :=TDecompressionStream.Create(CompressedStream);
Try
        //将被压缩的文件流解压缩,然后存入 Buffer内存块中
        SourceStream.ReadBuffer(Buffer^, Count);
        //将原始文件流保存至 DestStream流中
        DestStream.WriteBuffer(Buffer^, Count);
        DestStream.Position := 0;//复位流指针
        //从 DestStream流中载入原始文件流
        CompressedStreamM.LoadFromStream(DestStream);
finally
        FreeMem(Buffer);
        DestStream.Free;
end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -