分享
 
 
 

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

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

(一)编程原理:?

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

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

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

编程思路是,首先使用双通道技术将目标文件分割成指定大小的文件,扩展名依次是“指定文件名+.源文件扩展名+.分割序号”,并且生成一个还原信息文件“被分割文件名.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?’主程序结束?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有