截取文件的一部分方法很多,有的用分割工具軟件,有的ARJ等壓縮軟件實現(xiàn)。本文介紹用編程方法來實現(xiàn)。在VB環(huán)境中,完全可以利用VB自身提供的命令和函數(shù),提取、分割任何文件,定位準確、速度快。思路及重點如下:
。保┮颍郑碌模希校牛握Z句的二進制方式可以讀寫有任意結(jié)構(gòu)的文件,把源文件和截取的目標文件作為二進制方式讀出和寫入;
。玻牵牛哉Z句語法為:。牵牛裕#荚次募枺荆计鹗嘉恢茫荆甲兞浚纠茫牵牛哉Z句提供的起始位置可以對源文件讀的位置進行控制;
3)把每次讀取字節(jié)的長度放于字節(jié)變量數(shù)組中,以提高程序速度;
。矗┤粜杞厝〉哪繕宋募^大,應把源文件需讀的內(nèi)容分成一個個讀寫塊(注:目標文件仍只有一個),每一讀寫塊內(nèi)容放入字節(jié)數(shù)組中,讀寫塊未完部分須對字節(jié)數(shù)組的上下標進行重新設置,以便讀寫。
源程序如下:
Dim TargetFileLength, StartLength As Long
’目標文件長度及在源文件中的開始長度
Dim SourceFileName, TargetFileName As String
’源文件全路徑名和目標文件全路徑名
Dim ReadPos, WritePos As Long ’讀寫位置
Dim DSX() As Byte
’為字節(jié)數(shù)組,用來存儲讀寫內(nèi)容
Dim ReadFileNo, WriteFileNo As Integer
’讀寫文件號
Const Unit = 100000
’讀寫塊的大小
StartLength = InputBox("輸入目標文件在源文件中的開始長度")
’此值也可以通過其它方式獲取
TargetFileLength = InputBox("輸入目標文件長度")
’1)同上;
’2)或由目標文件在源文件中的結(jié)束長度轉(zhuǎn)換而來;
’3)該值在讀寫過程中是個變數(shù)
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
’給讀寫位置賦初值
’以下部分讀出寫入讀寫塊的整數(shù)部分
ReDim DSX(Unit) As Byte
’設置存儲字節(jié)數(shù)組的大小
Do While TargetFileLength > Unit
’TargetFileLength為變數(shù),反映讀寫過程中還剩的字節(jié)數(shù)
Get #ReadFileNo, ReadPos, DSX()
Put #WriteFileNo, WritePos, DSX()
ReadPos = ReadPos + Unit
WritePos = WritePos + Unit
TargetFileLength = TargetFileLength - Unit
Loop
’以下讀寫除讀寫塊倍數(shù)后的剩余部分
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;依筆者之見,在時間接近的情況下,為了減少資源的占用應盡量取下限。
。病⒈境绦蛏宰鞲膶,可作為過程被其它VB程序的調(diào)用。
。场⒈境绦虻臏y試環(huán)境為Visual Basic5.0中文版,Windows95系統(tǒng)下通過。 |