top
Loading...
截取部分文件的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系統下通過。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗