怎样在DELPHI中实现文件切割组合
浏阳历史网 2020-06-25 08:15:24
一、 文件切割/组合原理
所谓文件切割,就是把一个文件切割成若干个小文件。做法就是将一个文件对象以"文件流"的方式读出,然后按照一定的块(Block)大小分别存成文件。文件组合,就是把若干个文件组合成一个文件。比如像打包工具(Wise)用到的就是这个原理。如果大家对"流"这个概念熟悉的话,那么实现起来就很容易了,以下就是实现步骤。 二、 实现
在DELPHI中新建一个工程,然后在窗体中加入两个BUTTON,一个EDIT,一个OPENDIALOG,一个SAVEDIALOG,再将BUTTON1的CAPTION改为"切割",BUTTON2的CAPTION改为"组合"(注:其它控件的属性略)我好象有这毛病。再双击BUTTON1和BUTTON2,写下如下代码:
//切割文件
procedure tton1Click(Sender: TObject);
var
i, WantedFragSize, RealToWrite : Integer;
//声明两个文件流对象
//InStream为输入源文件流对象,OutStream为输出切割文件流对象
InStream, OutStream : TFileStream;
S : String;
begin
if ecute then
begin
tle := '输入你要保存的切割文件名';
If ecute then
begin
WantedFragSize := StrtoInt(xt); //定义切割块大小
i := 0;
//以只读的方式创建一个输入文件流对象
InStream:=eate(
leName,fmOpenRead);
Try
//如果Instream流的当前指针位置不在末尾,就按照定义的块大小//来读出数据并存成文件
while (sition ze) do
Begin
s := IntToStr(I);
while Length(s) 3 do s := '0'+s;
s := '大力推广带有行业共性的成果.'+s;
//生成切割文件的扩展名,用三位数字来作为扩展名,方便组合文件
//如果InStream所剩的块大小小于定义的块大小,则将剩下的块数//据存成文件
If ze - sition WantedFragSize then
RealToWrite := ze - sition
else
RealToWrite := WantedFragSize;
//创建一个输出文件流对象
OutStream:=eate(leName+s,fmCreate);
try
pyFrom(InStream,RealToWrite);
Inc(i);
Finally
//释放输出文件流对象
ee;
end;
end;
Finally
ee;
end;
end;
end;
end;
//组合文件
procedure tton2Click(Sender: TObject);
var
i : Integer;
InStream, OutStream : TFileStream;
SourcePath, FragName, S : String;
begin
tle := '请选择切割文件';
if ecute then
begin
//得到当前打开的切割文件的路径
SourcePath := ExtractFilePath(leName);
//得到当前打开的切割文件的文件名
FragName := ExtractFileName(leName);
tle := '请输入你要组合的文件名';
If ecute then
begin
i := 0;
s := IntToStr(I);
while Length(s) 3 do s := '0'+s;
s := '.'+s;
FragName := ChangeFileExt(FragName, s);
//如果目录中有以.000为扩展名的文件存在,则创建一个输出文件流//对象
If FileExists(SourcePath+FragName) then
begin
OutStream:=eate(leName,fmCreate);
Try
//按照以文件扩展名递增的方式组合文件
While FileExists(SourcePath+FragName) do
Begin
InStream:=eate(SourcePath+FragName,fmOpenRead);
Try
//将输入文件流的数据写入到输出文件流中
pyFrom(InStream,0);
Inc(i);
s := IntToStr(I);
while Length(s) 3 do s := '0'+s;
s := '.'+s;
FragName := ChangeFileExt(FragName, s);
finally
ee;
end;
end;
finally
ee;
end;
end;
end;
end;
end;
{*注释:请注意COPYFROM方法的使用,当第二个参数为0时,表示将输入流InStream的数据全部写入输出流OutStream;当大于0为N时,表示从输入流InStream的当前流指针位置开始,将N个字节数据写入输出流OutStream,并且InStream的流指针会向后偏移N个字节位数。详细解释请查看DELPHI自带的帮助*}
三、结束语
在我们用到的很多日常工具中,有很多都会用到的"流"这个对象,它的作用也非常大,例如文件加密,文件下载等都会涉及到"流",所以笔者认为,掌握它是很有用的,也是比较重要的。
查看本文来源
勃起功能障碍每日治疗吃什么好杭州治疗白癜风方法急性鼻窦炎症状- 四川教师公招:甘孜招914人,医学系岗位占比99%
- 2022年焊工考试高级焊工考试梁汉文套卷及答案
- 长春视觉艺术生文化课英语学习方法,高三学校分享
- 廖彬宇作人古诗选:天行记七律
- 肯豆的衣品真是“卡戴珊家之最”,漂亮有型,身材挑不出毛病
- 富国基金股权转让新进展:山东金融资产豪掷50.39亿元收购富国16.675%股权,回报率高达352.
- 【东方焦点】北京中医药大学东方医院与海外中医中心共同承办国际代表大会“中医儿科”线上分论坛取得圆满成
- 2022绍兴市公务员考试笔试时间重启公告
- 又一富豪入驻!李兆基出手投资新加坡!
- 小个子男生夏季穿搭,学学这3个显高技巧,轻松拥有大长腿
- 破亿元!七一一所成功中标地中海航运6艘16000TEU集装箱船脱硫系统对订单
- 蓝天燃气(605368.SH)发预盈,预计上半年盈利3.2亿元-3.6亿元,同比增加65.75%-8