其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

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


发布日期:2024年06月02日
 
利用Delphi轻松编制压缩助理程序

问题的提出

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

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

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

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

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

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

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

实现方法

. 程序设计界面

. 控件属性设置

Form的BorderStyle=bsDialog

两个OpenDialog控件名称分别设置为OpenDlg OpenDlg

设置OpenDlg的Options属性中的ofAllowMultiSelect=True

Filter属性设置为Split File(*spt)|*spt|All File(**)|**

SaveDialog的名称为SaveDlgSpinEdit的Value=MinValue=

MaxValue= Increment=合并按钮左边的控件是ListBox

名称ListBoxListBox的Sorted=True其它控件一个TImage控件

个Tedit和个Tbutton其属性从略

. 压缩助理程序的实现

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

//选择待分割的文件

procedure TFormButtonClick(Sender: TObject);

begin

if OpenDlgExecute then

begin

EditText := OpenDlgFileName;

end;

end;

//设置分割后的切片文件的存储位置

//SelectDirectory函数声明在FileCtrl单元中

procedure TFormButtonClick(Sender: TObject);

var

Dir: string;

begin

if SelectDirectory(选择存储目录: Dir) then

begin

EditText := Dir + \;

end;

end;

//分割文件为切片文件自动命名

procedure TFormButtonClick(Sender: TObject);

var

I K Rest Len: Integer;

AF BF: TFileStream; //文件流对象

Fn: string; //文件名

Buf : Integer; //单碟容量

begin

if (EditText = ) or (EditText = ) then

begin

Beep;

Exit;

end;

//单蝶容量计算为字节数

buf := SpinEditValue * ;

I := ;

try

Af := TFileStreamCreate(EditText fmOpenRead);

K := AfSize div Buf;

Rest := AfSize K * Buf;

For I := to K do

begin

Fn := EditText + IntToStr(I) + spt; //文件名

Bf := TFileStreamCreate(Fn fmCreate);

BfCopyFrom(Af Buf);

BfFree;

end;

if Rest > then

begin

Fn := EditText + IntToStr(I) + spt;

Bf := TFileStreamCreate(Fn fmCreate);

BfCopyFrom(Af Rest);

BfFree;

end;

finally

AFFree;

end;

end;

//将分割后的切片文件装入到ListBox

procedure TFormButtonClick(Sender: TObject);

var

I : Integer;

begin

if OpenDlgExecute then

For I := to OpenDlgFilesCount do

ListBoxItemsAdd(OpenDlgfiles[I]);

end;

//合并切片文件并保存合并结果

procedure TFormButtonClick(Sender: TObject);

var

Af Bf: TFileStream; //文件流对象

Fn Ft: string; //文件名

I : Integer;

begin

if ListBoxItemsCount = then

begin

Beep;

Exit;

end;

if SaveDlgExecute then

begin

Fn := SaveDlgFileName;

try

Af := TFileStreamCreate(Fn fmCreate);

For I := to ListBoxItemsCount do

begin

Ft := ListBoxItems[I];

Bf := TFileStreamCreate(Ft fmOpenRead);

AfCopyFrom(Bf BfSize);

BfFree;

end;

finally

AfFree;

end;

end;

end;

上述代码在WindowsDelphi下调试通过

               

上一篇:比较VC和Delphi的WinTest工程

下一篇:用Delphi实现图像放大镜