怎样在DELPHI中实现文件切割组合

怎样在DELPHI中实现文件切割组合,第1张

怎样在DELPHI中实现文件切割组合,第2张

一、文件剪切/组合原则

所谓文件切割,就是把一个文件切割成几个小文件。做法是以“文件流”的形式读出一个文件对象,然后按照一定的块大小保存为文件。记录组是将几个记录组组成一个文档。比如打包工具(Wise)就是利用了这个原理。如果你熟悉“流量”这个概念,就很容易实现。下面是实现的步骤。

二。实现

在Delphi中新建一个项目,然后添加两个按钮,一个EDIT,一个OPENDIALOG,一个SAVEDIALOG,然后将BUTTON1的标题改为“cut”,BUTTON2的标题改为“combine”(注意:其他控件的属性省略)。再次双击BUTTON1和BUTTON2,并编写以下代码:

//剪切文件
proceduretform 1 . button 1 click(sender:to object);
var
i,WantedFragSize,RealToWrite:Integer;
//声明两个文件流对象
//InStream为输入源文件流对象,OutStream为输出剪切文件流对象
instream,OutStream:tfilestream;
S:String;
begin
if open dialog 1 . execute then
begin
save dialog 1 . title:= '输入要保存的剪切文件的名称';
If SaveDialog1。execute then
begin
wanted fragsize:= str point(edit 1。正文);//定义切割块大小
I:= 0;
//以只读方式创建输入文件流对象
instream:= tfilestream . Create(
open dialog 1 . filename,fmopenread);
Try
//如果Instream流的当前指针位置不在末尾,则根据定义的块大小//读取数据并保存为文件
,同时(Instream . position < Instream . size)do
begin
s:= intint。
当长度(s) < 3时,do s:= ' 0 '+s;
s := ','+s;
//生成剪切文件的扩展名,用三位数作为扩展名方便文件合并
//如果InStream剩余块大小小于定义的块大小,则将剩余块//保存为文件
If stream . size-stream . position < wanted fragment size then
real to write:= stream . size-stream . position
else
RealToWrite:= wanted fragsize;
//创建一个输出文件流对象
OUTStream:= tfilestream . Create(savedialog 1 . filename+s,FM Create);
尝试
OutStream。CopyFrom(InStream,RealToWrite);
公司(一);
Finally
//释放输出文件流对象
outlet . free;
end;
end;
最终
在流中。免费;
end;
end;
end;
end;

//组合文件
proceduretform 1 . button 2 click(sender:to object);
var
i:整数;
InStream,OutStream:TFileStream;
SourcePath,FragName,S:String;
begin
open dialog 1 . title:= '请选择剪切文件';
if open dialog 1 . execute then
begin
/获取当前打开的切割文件的路径
source path:= extract file path(open dialog 1 . filename);
//获取当前打开的切割文件的文件名
fragname:= extract filename(open dialog 1 . filename);
保存对话1。Title := '请输入要合并的文件名';
If SaveDialog1。execute then
begin
I:= 0;
s:= IntToStr(I);
当长度(s) < 3时,do s:= ' 0 '+s;
s := ','+s;
FragName:= ChangeFileExt(FragName,s);
//如果目录中存在扩展名为. 000的文件,则创建输出文件stream//object
如果文件存在(sourcepath+fragname),则
begin
outlet:= tfilestream . create(savedialog 1 . filename
Try
//在文件存在(sourcepath+fragname)时以递增的文件扩展名组合文件
do
begin
in stream:= tfilestream . create(create
Try
//将输入文件流的数据写入输出文件流
outlet.copyfrom (instream,0);
公司(一);
s:= IntToStr(I);
当长度(s) < 3时,do s:= ' 0 '+s;
s := ','+s;
FragName:= ChangeFileExt(FragName,s);
最终
在流中。免费;
end;
end;
终于
流出。免费;
end;
end;
end;
end;
end;

{*注意:请注意COPYFROM方法的使用。当第二个参数为0时,表示输入流InStream的所有数据都写入输出流OutStream;当大于0为N时,表示从输入流InStream的当前流指针位置开始,将有N个字节的数据写入输出流OutStream,InStream的流指针将向后移动N个字节。详细解释请参考DELPHI自己的帮助*}

三。结束语

在我们日常使用的很多工具中,有很多“流”对象会用到,它的作用也是非常大的。比如文件加密,文件下载都会涉及到“流”,所以我觉得掌握它非常有用,非常重要。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 怎样在DELPHI中实现文件切割组合

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情