截取文件的一部分方法很多,有的用分割工具软件,有的ARJ等压缩软件实现。本文介绍用编程方法来实现。在VB环境中,完全可以利用VB自身提供的命令和函数,提取、分割任何文件,定位准确、速度快。思路及重点如下:
1)因VB的OPEN语句的二进制方式可以读写有任意结构的文件,把源文件和截取的目标文件作为二进制方式读出和写入;
2)GET语句语法为: GET#<源文件号>,<起始位置>,<变量>利用GET语句提供的起始位置可以对源文件读的位置进行控制;
3)把每次读取字节的长度放于字节变量数组中,以提高程序速度;
4)若需截取的目标文件较大,应把源文件需读的内容分成一个个读写块(注:目标文件仍只有一个),每一读写块内容放入字节数组中,读写块未完部分须对字节数组的上下标进行重新设置,以便读写。
源程序如下:
Dim TargetFileLength, StartLength As Long
'目标文件长度及在源文件中的开始长度
Dim SourceFileName, TargetFileName As String
'源文件全路径名和目标文件全路径名
Dim ReadPos, WritePos As Long '读写位置
Dim DSX() As Byte
'为字节数组,用来存储读写内容
Dim ReadFileNo, WriteFileNo As Integer
'读写文件号
Const Unit = 100000
'读写块的大小
StartLength = InputBox("输入目标文件在源文件中的开始长度")
'此值也可以通过其它方式获取
TargetFileLength = InputBox("输入目标文件长度")
'1)同上;
'2)或由目标文件在源文件中的结束长度转换而来;
'3)该值在读写过程中是个变数
SourceFileName = InputBox("输入源文件名")
TargetFileName = InputBox("输入目标文件名")
ReadFileNo = FreeFile
Open SourceFileName For Binary Access Read As ReadFileNo
'打开欲截取的源文件名
WriteFileNo = FreeFile
Open TargetFileName For Binary Access Write As WriteFileNo
'欲打开的目标文件名
ReadPos = 1: WritePos = 1
ReadPos = ReadPos + StartLength
'给读写位置赋初值
'以下部分读出写入读写块的整数部分
ReDim DSX(Unit) As Byte
'设置存储字节数组的大小
Do While TargetFileLength > Unit
'TargetFileLength为变数,反映读写过程中还剩的字节数
Get #ReadFileNo, ReadPos, DSX()
Put #WriteFileNo, WritePos, DSX()
ReadPos = ReadPos + Unit
WritePos = WritePos + Unit
TargetFileLength = TargetFileLength - Unit
Loop
'以下读写除读写块倍数后的剩余部分
ReDim DSX(TargetFileLength) As Byte
Get #ReadFileNo, ReadPos, DSX()
Put #WriteFileNo, WritePos, DSX()
Close WriteFileNo, ReadFileNo
说明:1、对源文件和目标文件较大时,对Unit 的取值比较考究。Unit的取值视机器配置而定,笔者的机型为6X86PR200+,取Unit=100,000,000 到5,000,000,000;依笔者之见,在时间接近的情况下,为了减少资源的占用应尽量取下限。
2、本程序稍作改写,可作为过程被其它VB程序的调用。
3、本程序的测试环境为Visual Basic5.0中文版,Windows95系统下通过。
欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛
https://bbs.txwb.com
关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩
|
本文来源:网络 作者:佚名