截取部分文件的VB编程技巧

2008-04-09 04:41:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  截取文件的一部分方法很多,有的用分割工具软件,有的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系统下通过。
  

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:利用磁盘的序列号进行软件加密

下一篇:利用Delphi扩充VB函数