利用Delphi轻松编制压缩助理程序
点击次数:50 次 发布日期:2008-11-09 08:39:11 作者:源代码网
|
源代码网推荐 Winzip是电脑使用过程中,备份和数据交换的常用工具之一。然而,在实际使用过程中,笔者发现Winzip在用来进行数据交换操作时有一些不尽人意的地方, 如: 源代码网推荐 1. 当将一个大的压缩包分卷压缩到软盘上时,操作者手头必须有多张软盘才能完成数据包的转存,这种情况如果发生在手头只有一张软盘的情况下,可真的没办法。 源代码网推荐 2. 如果分卷存储数据软盘中的某张软盘在写入或读出数据时发生错误,则上一过程必须重做 源代码网推荐 3. 要在其它机器上读出软盘上的数据,则该机器也必须要求安装了Winzip。 源代码网推荐 那么,有没有好的解决办法,避免上述容易出错和烦琐安装软件的过程呢?因此,笔者用Delphi5.0编制了压缩助理程序,以为数据交换提供一种辅助方法和手段。 源代码网推荐 源代码网推荐 二、压缩助理程序设计的基本思路 源代码网推荐 通过压缩工具将要在不同计算机间交换的文件压缩并转换成自解压格式,通过压缩助理程序将该自解压包以软盘容量为单位分割成多个存储在硬盘上的文件,这样,通过Copy命令和一张软盘就能够实现对大的压缩包在不通的计算机间交换数据;再利用压缩助理程序在另一台机器上将上述多个文件合并,成为自解压文件格式,避免了再安装Winzip软件的繁琐过程。通过压缩助理程序,上述问题即可迎刃而解。 软件开发网 www.mscto.com 源代码网推荐 源代码网推荐 三、实现方法 源代码网推荐 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; 源代码网推荐 上述代码在Windows98,Delphi5.0下调试通过。 源代码网推荐 源代码网供稿. |
