利用 Delphi 轻松编制压缩助理程序

本文介绍了一种使用Delphi5.0开发的压缩助理程序,旨在解决Winzip在数据交换中存在的问题。该程序能够将大型自解压文件分割为适合软盘传输的小文件,并在接收端重新合并这些文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、问题的提出 
    Winzip是电脑使用过程中,备份和数据交换的常用工具之一。然而,在实际使用过程中,笔者发现Winzip在用来进行数据交换操作时有一些不尽人意的地方, 如:

    1. 当将一个大的压缩包分卷压缩到软盘上时,操作者手头必须有多张软盘才能完成数据包的转存,这种情况如果发生在手头只有一张软盘的情况下,可真的没办法。

    2. 如果分卷存储数据软盘中的某张软盘在写入或读出数据时发生错误,则上一过程必须重做

    3. 要在其它机器上读出软盘上的数据,则该机器也必须要求安装了Winzip。

    那么,有没有好的解决办法,避免上述容易出错和烦琐安装软件的过程呢?因此,笔者用Delphi5.0编制了压缩助理程序,以为数据交换提供一种辅助方法和手段。

    二、压缩助理程序设计的基本思路

    通过压缩工具将要在不同计算机间交换的文件压缩并转换成自解压格式,通过压缩助理程序将该自解压包以软盘容量为单位分割成多个存储在硬盘上的文件,这样,通过Copy命令和一张软盘就能够实现对大的压缩包在不通的计算机间交换数据;再利用压缩助理程序在另一台机器上将上述多个文件合并,成为自解压文件格式,避免了再安装Winzip软件的繁琐过程。通过压缩助理程序,上述问题即可迎刃而解。

    三、实现方法

    1. 程序设计界面

    2. 控件属性设置

Form1的BorderStyle=bsDialog;
     两个OpenDialog控件名称分别设置为OpenDlg, OpenDlg1;
     设置OpenDlg1的Options属性中的ofAllowMultiSelect=True,
     Filter属性设置为Split File(*.spt)|*.spt|All File(*.*)|*.*;
     SaveDialog的名称为SaveDlg;SpinEdit1的Value=1440,MinValue=1440,
     MaxValue=1600, Increment=1;在“合并”按钮左边的控件是ListBox,
     名称ListBox1,ListBox1的Sorted=True;其它控件:一个TImage控件,
      2个Tedit和5个Tbutton,其属性从略。
 


    3. 压缩助理程序的实现

从上到下五个命令按钮的代码依次如下:

//选择待分割的文件
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDlg.Execute then
begin
Edit1.Text := OpenDlg.FileName;
end;
end;

//设置分割后的切片文件的存储位置
//SelectDirectory函数声明在FileCtrl单元中
procedure TForm1.Button2Click(Sender: TObject);
var
Dir: string;
begin
if SelectDirectory('选择存储目录:', '', Dir) then
begin
Edit2.Text := Dir + '/';
end;
end;

//分割文件为切片文件,自动命名
procedure TForm1.Button3Click(Sender: TObject);
var
I, K, Rest, Len: Integer;
AF, BF: TFileStream; //文件流对象
Fn: string; //文件名
Buf : Integer; //单碟容量
begin
if (Edit1.Text = '') or (Edit2.Text = '') then
begin
Beep;
Exit;
end;
//单蝶容量计算为字节数
buf := SpinEdit1.Value * 1024;
I := 1;
try
Af := TFileStream.Create(Edit1.Text, fmOpenRead);
K := Af.Size div Buf;
Rest := Af.Size - K * Buf;
For I := 1 to K do
begin
Fn := Edit2.Text + IntToStr(I) + '.spt'; //文件名
Bf := TFileStream.Create(Fn, fmCreate);
Bf.CopyFrom(Af, Buf);
Bf.Free;
end;
if Rest > 0 then
begin
Fn := Edit2.Text + IntToStr(I) + '.spt';
Bf := TFileStream.Create(Fn, fmCreate);
Bf.CopyFrom(Af, Rest);
Bf.Free;
end;
finally
AF.Free;
end;
end;

//将分割后的切片文件装入到ListBox1中
procedure TForm1.Button4Click(Sender: TObject);
var
I : Integer;
begin
if OpenDlg1.Execute then
For I := 0 to OpenDlg1.Files.Count - 1 do
ListBox1.Items.Add(OpenDlg1.files[I]);
end;

//合并切片文件并保存合并结果
procedure TForm1.Button5Click(Sender: TObject);
var
Af, Bf: TFileStream; //文件流对象
Fn, Ft: string; //文件名
I : Integer;
begin
if ListBox1.Items.Count = 0 then
begin
Beep;
Exit;
end;
if SaveDlg.Execute then
begin
Fn := SaveDlg.FileName;
try
Af := TFileStream.Create(Fn, fmCreate);
For I := 0 to ListBox1.Items.Count -1 do
begin
Ft := ListBox1.Items[I];
Bf := TFileStream.Create(Ft, fmOpenRead);
Af.CopyFrom(Bf, Bf.Size);
Bf.Free;
end;
finally
Af.Free;
end;
end;
end;

上述代码在WindowsXP,Delphi7.0/5.0下调试通过。

 
基本安装 1、对于单个控件,Componet-->install component..-->PAS或DCU文件-->install; 2、对于带*.dpk文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install即可; 3、对于带*.bpl文件的控件包,Install Packages-->Add-->bpl文件名即可; 4、如果以上Install按钮为失效的话,试试Compile按钮; 5、是run time lib则在option下的packages下的runtimepackes加之。 如果编译时提示文件找不到的话,一般是控件的安装目录不在Delphi的Lib目录中,有两种方法可以解决: 1、反安装的源文件拷入到Delphi的Lib目录下; 2、或者Tools-->Environment Options中把控件源代码路径加入到Delphi的Lib目录中即可。 注意:所安装的控件是否与你所用的Delphi版本相适应。 RxLib的安装   首先在Delphi 5 的 IDE 中将以前版本的 Rxlib 反安装掉,删除 RXCTL5.BPL、RXDB5.BPL、 RXBDE5.BPL、DCLRX5.BPL、 DCLRXDB5.BPL 和DCLRXBD5.BPL。   打开 Rx 的运行包 RXCTL5.DPK,在 Package 窗口中按 Compile 按钮编译 RXCTL5.DPK ,然后用同样方法编译另两个运行包RXDB5.DPK 和 RXBDE5.DPK ,将编译后的三个 BPL 文件放到搜索路径中,如 WINDOWS\SYSTEM等。   在编译完运行包后你必须将 RX 的设计期包安装到 IDE 环境中。   打开 Rx 的设计期包 DCLRX5.DPK,在 Package 窗口中按 Compile 按钮编译,然后按 Install按钮将设计期包注册到组件面板中。用同样的方法安装 DCLRXDB5.DPK 和 DCLRXBD5.DPK。   注意:不要在 Delphi IDE 中保存包资源(package sources)! 控件删除 在Component/Install Packages中删除。 选Component/configure Palette… 有pages和components两个区域 双击components区域,选中要删除得控件,下面有得Delete按钮 但系统提供的控件只能Hide,不能delete。 打开控件所在的包文件(*.dpk),从中删除控件那个文件,再重新编译该包即可 如果是整个控件包都要删除的话,project->Option->Packages,删掉那个packages,That would be ok~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值