选择显示字体大小

怎样在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自带的帮助*}

  三、结束语

  在我们用到的很多日常工具中,有很多都会用到的"流"这个对象,它的作用也非常大,例如文件加密,文件下载等都会涉及到"流",所以笔者认为,掌握它是很有用的,也是比较重要的。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons