中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
利用 Delphi 轻松编制压缩助理程序
作者:康百 时间:2006-10-05 13:07 出处:ccidnet.com 责编:月夜寒箫
              摘要:利用 Delphi 轻松编制压缩助理程序

一、问题的提出

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;

上述代码在Windows98,Delphi5.0下调试通过。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有