截取部分文件的VB编程技巧
【打印文章】
截取文件的一部分方法很多,有的用分割工具软件,有的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系统下通过。
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系统下通过。
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】