二进制双通道技术实现文件分割(一)

原创 2004年09月10日 17:03:00
(一)编程原理:?


  文件分割实际上就是将目标文件用二进制读写的方法,精确的连续保存为合适大小的独立文件,一般来说,分割后的文件在正确组装前是不能被使用的。?


  文件还原是文件分割的逆过程,即是将分割后的文件严密的按照分割顺序用二进制读写的方法写入一个同一个文件的过程,只要程序算法和逻辑正确严密,分割前和分割后的文件是没有一个字节的差别的。?


  之所以使用双通道技术是因为当被分割的文件较大或者非常大(远远大于内存)时,使用单个文件通道定义的内存二进制缓冲数组非常容易造成内存的用尽而导致操作失败,另一方面,它的处理速度和可靠性也是非常令人担忧的。?


  编程思路是,首先使用双通道技术将目标文件分割成指定大小的文件,扩展名依次是“指定文件名+.源文件扩展名+.分割序号”,并且生成一个还原信息文件“被分割文件名.hj”,该文件将记录文件分割的有关信息;文件还原时,同样利用双通道,按照在还原信息文件中登记的信息,将待还原的文件写入同一个文件中。?


  (二)编程实践:?


  (1)启动vb6,建立一个标准exe工程,添加一个窗体form1,添加microsoft?common?dialog?control?6.0控件,命名为cod1;添加两个frame控件(frame1的caption=“文件分割”,frame2的caption=“文件还原”);添加五个标签框,caption属性依次为“被分割文件名”、“分割后文件大小”、“分割后文件保存在”、“单位:bytes字节”、“还原信息文件名”、“还原后文件保存在”;由上至下一次添加四个caption=“浏览...”的命令按钮command1、command2、command3、command4;由上至下依次添加5个textbox按钮txtFileName、txtFileLength、Txtoutname、txtTemplateName、txtOutputFile;添加两个命令按钮cmdsplit,caption=“开始分割”、cmdunsplit,caption=“开始还原”;两个命令按command5、command6用来指示操作执行进度。代码如下:?


  Option?Explicit?


  Private?Sub?cmdSplit_Click()?’文件分割?


  Dim?err_descr?As?String?’定义接收返回错误码的字符串变量?


  If?Not?SplitFile(txtFileName.Text,0,err_descr,CLng(txtFileLength.Text),Txtoutname.Text)?Then?


  MsgBox?"文件操作产生了错误——"?&?err_descr,vbExclamation?


  Else?


  MsgBox?"文件分割操作已经圆满完成!"?


  End?If?


  End?Sub?’当splitfile公用过程返回值=true表示操作成功,否则失败并返回错误简短的提示?


  Private?Sub?cmdUnsplit_Click()?’文件还原?


  Dim?err_descr?As?String?


  If?Not?ReassembleFile(txt?TemplateName.Text,False,txtOutputFile.Text)?Then?


  MsgBox?"文件操作产生了错误——"?&?err_descr,vbExclamation?


  Else?


  MsgBox?"文件还原操作已经圆满完成!"?


  End?If?


  End?Sub?’当ReassembleFile公用过程返回值=true表示操作成功,否则失败并返回错误简短的提示?


  Private?Sub?Command1_Click()?’选择被分割文件?


  CoD1.Filter="所有格式文件*.*|*.*"?


  CoD1.ShowOpen?


  If?CoD1.FileName<>""?Then?


  txtFileName.Text=CoD1.FileName?


  End?If?’如果未选中文件就退出过程?


  End?Sub?


  Private?Sub?Command2_Click()?’分割后文件保存路径名称?


  With?CoD1?


  If?txtFileName.Text=""?Then?


  MsgBox?"请首先选择一个被分割文件!"?


  Exit?Sub?


  End?If?’如果未选定被分割文件退出过程?


  .ShowSave?


  If?.FileName<>""?Then?


  Txtoutname.Text=.FileName?


  End?If?’如果未指定保存文件名退出?


  End?With?


  End?Sub?


  Private?Sub?Command3_Click()?’传回还原信息文件名?


  With?CoD1?


  .FileName=""?


  .Filter="还原信息文件*.hj|*.hj"?’只显示*.hj还原信息文件?


  .ShowOpen?


  If?.FileName<>""?Then?


  txtTemplateName.Text=.FileName?


  End?If?


  End?With?


  End?Sub?


  Private?Sub?Command4_Click()?’得到并计算还原后文件名、扩展名?


  Dim?g?


  With?CoD1?


  If?txtTemplateName.Text=""?Then?


  MsgBox?"请首先选择一个还原信息文件!"?


  Exit?Sub?’如果还原信息文件未被选中,则退出过程?


  End?If?


  .Filter=""?


  .FileName=""?’清空过期文件名和类型指针?


  .ShowSave?


  If?.FileName<>""?Then?


  g=InStr(1,txtTemplateName.Text,".")?’查找第一个“.”?


  txtOutputFile.Text=.FileName?&?Mid?


  (txtTemplateName.Text,g,4)?’返回文件的用户指定名称和原扩展名?


  End?If?


  End?With?


  End?Sub?


  Private?Sub?Form_Load()?


  Me.Left=(Screen.Width-Me.Width)/2?


  Me.Top=(Screen.Height-Me.Height)/2?’窗体居中?


  Me.Caption=App.Title?’初始化标题栏?


  End?Sub?’主程序结束?

Linux下二进制文件的分割与合并

博客分类: Linux/Unix日常管理   dd的作用是转换和拷贝文件,我们可以利用它来分割文件,相关的选项如下: if=filename:输入的文件名 of=finename:输出的...
  • zangcf
  • zangcf
  • 2013年03月19日 13:59
  • 2505

加一条内存条组成双通道(实战)

先列一下自己的电脑配置+购买的 京东条内存条:自己不需要很高,按自己需求来。我收到的条条实物图:都准备好了就开始了:首先:1:2:用螺丝刀开始卸螺丝:建议自己把螺丝放进一个容器:要是丢了。。。看一下u...
  • qq_26816591
  • qq_26816591
  • 2016年06月26日 07:32
  • 278

使用Python进行文件的分割与合并

使用Python来进行文件的分割与合并是非常简单的。 python代码如下: splitFile--将文件分割成大小为chunksize的块; mergeFile--将众多文件块合并成原来的文件; #...
  • just_young
  • just_young
  • 2014年11月25日 19:25
  • 2095

C语言实现的二进制文件复制

//复制文件 void CopyFile(char* s1,char* s2) { FILE * file1,*file2; //使用二进制模式打开文件 file1 = fopen(s1,"...
  • zgljl2012
  • zgljl2012
  • 2015年02月10日 15:00
  • 2076

stm32之adc双通道的实现dma

//通过脚PA1,PA2采集AD。每路AD采集10次。  #include "stm32f1.h"       //全局变量    //AD采样存放空间    __IO uint16_t ADCC...
  • q759040024
  • q759040024
  • 2014年04月06日 19:34
  • 2472

STM32通过TIM,ADC,DMA的配合使用实现双通道数据采样

第一次写博客,奉献给STM32了,一直以来都是潜水看博客,希望能够自己也能写一点东西,对自己学习和工作的一个总结,希望能够坚持下去。项目背景:以57.6kbps的速率采集两个通道的数据 芯片:STM...
  • yeqbo
  • yeqbo
  • 2016年05月10日 20:57
  • 2222

文件分割管理技术

文件分割管理技术对于文件管理我们已经非常熟悉,但是云同步应用的文件管理不同于本地文件管理,云同步的数据存储方式区分于本地文件存储方式。文件存储系统在设计 初期会确定存储系统的需求,如果文件存储系统设...
  • qq_16836151
  • qq_16836151
  • 2016年08月09日 00:05
  • 325

java实现文件的分割与合并

无非就是io流------------------------------------------------------- 实例类: 1.抽象类 import java.io.File; impor...
  • lbf5210
  • lbf5210
  • 2016年05月06日 14:17
  • 925

Java-使用IO流对大文件进行分割和分割后的合并

有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件。分割后的每个小文件...
  • u014740338
  • u014740338
  • 2015年05月11日 08:54
  • 5183

关于将string类对象存入二进制文件

之前我有遇到过一个练习题,要我将string类对象存入二进制文件中,而众所周知,二进制文件是不可以存储指针的,因为当你读取二进制文件里的指针的时候,这个指针原来指向的内存地址已经被回收了,这是无意义了...
  • Tianluoyuge
  • Tianluoyuge
  • 2015年11月12日 11:18
  • 1573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二进制双通道技术实现文件分割(一)
举报原因:
原因补充:

(最多只允许输入30个字)