截取部分文件的VB編程技巧
發表于:2007-07-14來源:作者:點擊數:
標簽:
截取文件的一部分方法很多,有的用分割工具軟件,有的ARJ等壓縮軟件實現。本文介紹用編程方法來實現。在VB環境中,完全可以利用VB自身提供的命令和函數,提
截取文件的一部分方法很多,有的用分割工具軟件,有的ARJ等壓縮軟件實現。本文介紹用編程方法來實現。在VB環境中,完全可以利用VB自身提供的命令和函數,提取、分割任何文件,定位準確、速度快。思路及重點如下:
1)因VB的OPEN語句的二進制方式可以讀寫有任意結構的文件,把源文件和截取的目標文件作為二進制方式讀出和寫入;
2)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 A
clearcase/" target="_blank" >ccess 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;依筆者之見,在時間接近的情況下,為了減少資源的占用應盡量取下限。
?。?、本程序稍作改寫,可作為過程被其它VB程序的調用。
?。?、本程序的
測試環境為Visual Basic5.0中文版,
Windows95系統下通過。
原文轉自:http://www.anti-gravitydesign.com