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

zhangxf9212

zhangxf9212

2016-01-29 14:27

怎样在DELPHI中实现文件切割/组合,怎样在DELPHI中实现文件切割/组合
  所谓文件切割,就是把一个文件切割成若干个小文件。做法就是将一个文件对象以"文件流"的方式读出,然后按照一定的块(Block)大小分别存成文件。文件组合,就是把若干个文件组合成一个文件。比如像打包工具(Wise)用到的就是这个原理。如果大家对"流"这个概念熟悉的话,那么实现起来就很容易了,以下就是实现步骤。

  二、 实现

  在DELPHI中新建一个工程,然后在窗体中加入两个BUTTON,一个EDIT,一个OPENDIALOG,一个SAVEDIALOG,再将BUTTON1的CAPTION改为"切割",BUTTON2的CAPTION改为"组合"(注:其它控件的属性略)。再双击BUTTON1和BUTTON2,写下如下代码:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/)

//切割文件
procedure TForm1.Button1Click(Sender: TObject);
 var
  i, WantedFragSize, RealToWrite : Integer;
  //声明两个文件流对象
  //InStream为输入源文件流对象,OutStream为输出切割文件流对象
  InStream, OutStream : TFileStream;
  S : String;
 begin
  if Opendialog1.Execute then
  begin
   SaveDialog1.Title := 输入你要保存的切割文件名;
   If SaveDialog1.Execute then
   begin
    WantedFragSize := StrtoInt(Edit1.Text); //定义切割块大小
    i := 0;
    //以只读的方式创建一个输入文件流对象
    InStream:=TFileStream.Create(
    OpenDialog1.FileName,fmOpenRead);
    Try
     //如果Instream流的当前指针位置不在末尾,就按照定义的块大小//来读出数据并存成文件
     while (InStream.Position < InStream.Size) do
     Begin
      s := IntToStr(I);
      while Length(s) < 3 do s := 0+s;
      s := .+s;
      //生成切割文件的扩展名,用三位数字来作为扩展名,方便组合文件
      //如果InStream所剩的块大小小于定义的块大小,则将剩下的块数//据存成文件
      If InStream.Size - InStream.Position < WantedFragSize then
       RealToWrite := InStream.Size - InStream.Position
      else
       RealToWrite := WantedFragSize;
       //创建一个输出文件流对象
       OutStream:=TFileStream.Create(SaveDialog1.FileName+s,fmCreate);
       try
        OutStream.CopyFrom(InStream,RealToWrite);
        Inc(i);
       Finally
        //释放输出文件流对象
        OutStream.Free;
        end;
       end;
      Finally
       InStream.Free;
      end;
     end;
    end;
   end;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/)

 //组合文件
procedure TForm1.Button2Click(Sender: TObject);
var
 i : Integer;
 InStream, OutStream : TFileStream;
 SourcePath, FragName, S : String;
 begin
  Opendialog1.Title := 请选择切割文件;
  if Opendialog1.Execute then
  begin
   //得到当前打开的切割文件的路径
   SourcePath := ExtractFilePath(Opendialog1.FileName);
   //得到当前打开的切割文件的文件名
   FragName := ExtractFileName(Opendialog1.FileName);
   SaveDialog1.Title := 请输入你要组合的文件名;
   If SaveDialog1.Execute 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:=TFileStream.Create(Savedialog1.FileName,fmCreate);
     Try
      //按照以文件扩展名递增的方式组合文件
      While FileExists(SourcePath+FragName) do
      Begin
       InStream:=TFileStream.Create(SourcePath+FragName,fmOpenRead);
      Try
       //将输入文件流的数据写入到输出文件流中
       OutStream.CopyFrom(InStream,0);

展开更多 50%)
分享

猜你喜欢

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

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

在Delphi中定位文件位置

Delphi
在Delphi中定位文件位置

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在Delphi中巧改窗体文件实现控件数组

编程语言 网络编程
在Delphi中巧改窗体文件实现控件数组

在Delphi中巧改窗体文件实现控件数组化

Delphi
在Delphi中巧改窗体文件实现控件数组化

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VB中实现文件上传

编程语言 网络编程
在VB中实现文件上传

组件技术在Delphi中的实现(1)

Delphi
组件技术在Delphi中的实现(1)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

计算2000年01月01日起到指定日的天数

计算2000年01月01日起到指定日的天数

《口袋战争》攻略之游戏功能介绍

《口袋战争》攻略之游戏功能介绍
下拉加载更多内容 ↓