Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490403
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:49:55

下载本文示例代码
  一、 文件切割/组合原理  所谓文件切割,就是把一个文件切割成若干个小文件。做法就是将一个文件对象以"文件流"的方式读出,然后按照一定的块(Block)大小分别存成文件。文件组合,就是把若干个文件组合成一个文件。比如像打包工具(Wise)用到的就是这个原理。如果大家对"流"这个概念熟悉的话,那么实现起来就很容易了,以下就是实现步骤。   二、 实现  在DELPHI中新建一个工程,然后在窗体中加入两个BUTTON,一个EDIT,一个OPENDIALOG,一个SAVEDIALOG,再将BUTTON1的CAPTION改为"切割",BUTTON2的CAPTION改为"组合"(注:其它控件的属性略)。再双击BUTTON1和BUTTON2,写下如下代码: //切割文件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;  //组合文件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);       Inc(i);       s := IntToStr(I);       while Length(s) < 3 do s := '0' s;        s := '.' s;        FragName := ChangeFileExt(FragName, s);      finally       InStream.Free;      end;     end;    finally     OutStream.Free;    end;   end;  end; end;end;   {*注释:请注意COPYFROM方法的使用,当第二个参数为0时,表示将输入流InStream的数据全部写入输出流OutStream;当大于0为N时,表示从输入流InStream的当前流指针位置开始,将N个字节数据写入输出流OutStream,并且InStream的流指针会向后偏移N个字节位数。详细解释请查看DELPHI自带的帮助*}   三、结束语  在我们用到的很多日常工具中,有很多都会用到的"流"这个对象,它的作用也非常大,例如文件加密,文件下载等都会涉及到"流",所以笔者认为,掌握它是很有用的,也是比较重要的。   一、 文件切割/组合原理  所谓文件切割,就是把一个文件切割成若干个小文件。做法就是将一个文件对象以"文件流"的方式读出,然后按照一定的块(Block)大小分别存成文件。文件组合,就是把若干个文件组合成一个文件。比如像打包工具(Wise)用到的就是这个原理。如果大家对"流"这个概念熟悉的话,那么实现起来就很容易了,以下就是实现步骤。   二、 实现  在DELPHI中新建一个工程,然后在窗体中加入两个BUTTON,一个EDIT,一个OPENDIALOG,一个SAVEDIALOG,再将BUTTON1的CAPTION改为"切割",BUTTON2的CAPTION改为"组合"(注:其它控件的属性略)。再双击BUTTON1和BUTTON2,写下如下代码: //切割文件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;  //组合文件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);       Inc(i);       s := IntToStr(I);       while Length(s) < 3 do s := '0' s;        s := '.' s;        FragName := ChangeFileExt(FragName, s);      finally       InStream.Free;      end;     end;    finally     OutStream.Free;    end;   end;  end; end;end;   {*注释:请注意COPYFROM方法的使用,当第二个参数为0时,表示将输入流InStream的数据全部写入输出流OutStream;当大于0为N时,表示从输入流InStream的当前流指针位置开始,将N个字节数据写入输出流OutStream,并且InStream的流指针会向后偏移N个字节位数。详细解释请查看DELPHI自带的帮助*}   三、结束语  在我们用到的很多日常工具中,有很多都会用到的"流"这个对象,它的作用也非常大,例如文件加密,文件下载等都会涉及到"流",所以笔者认为,掌握它是很有用的,也是比较重要的。 下载本文示例代码


怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合怎样在DELPHI中实现文件切割/组合
阅读(172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~