重點講解VB.NET二進制文件操作
VB.NET有很多值得學習的地方,這里我們主要介紹VB.NET二進制文件。大家都知道所有文件的存儲其實質(zhì)都是二進制的,VB.NET二進制文件往往由兩部分組成,一部分是文件頭另一部分存放了文件的內(nèi)容。文件頭通常存放與文件格式有關的信息,以BMP等圖象文件為例,它們的文件頭中存放了是何種圖形格式、圖象大小、調(diào)色板等信息,要顯示圖象時先讀取文件頭以獲得文件的詳細信息,然后再按其格式把圖象內(nèi)容顯示出來。用二進制方式可以操作任何的文件,當然至關重要的一點是要清楚了解所操作文件的文件頭結構。
#T#VB.NET二進制文件操作主要應用的方法和函數(shù)有:Open,Close,Get,Put等。
Open:在For后面的打開模式要用Binary。
Close:關閉文件。
Get:在指定位置取得文件的內(nèi)容,如果省略位置則從當前位置讀取。
Put:在指定位置寫入文件,如果省略位置參數(shù)就從當前位置寫。
下面結合代碼講解VB.NET二進制文件的操作
下述程序完成了將兩個文件結合成一個文件以及將這個結合后的文件再拆分成原來的兩個文件。文件頭的結構是自己定義的,非常簡單,共8個字節(jié)(也就是兩個長整型的長度),前4個字節(jié)存放***個文件的長度,后4個字節(jié)存放第二個文件的長度。為了更直觀地表達文件的結構,現(xiàn)假設有兩個文件,***個文件長度是100字節(jié),第二個文件是200字節(jié),那么合并后得到的文件應該是308字節(jié)。按順序來看,文件的結構是:
4***文件的長度
4第二文件的長度
100***文件的二進制內(nèi)容
200第二文件的二進制內(nèi)容
除了文件頭的8字節(jié)長度是固定的后面的長度都會因文件的不同而變化的。
- ‘實現(xiàn)文件的合并
- Private Sub MergeFile()
- Dim strFileName1 As String '***個文件
- Dim strFileName2 As String '第二個文件
- Dim strOutput As String '合并后的文件
- Dim aryContent() As Byte '用來讀取文件的數(shù)組,每次讀取前要重定義
- strFileName1 = "c:\a.bmp"
- strFileName2 = "c:\.bmp"
- strOutput = "c:\out.bmp"
- '注意下面三個Open語句都是用Binary模式打開的
- Open strOutput For Binary As #100
- Open strFileName1 For Binary As #1
- Open strFileName2 For Binary As #2
- Put #100, , LOF(1) '取得***文件的長度,并把它寫入到合并文件的文件頭中
- Put #100, , LOF(2) '取得第二文件的長度,并寫入到合并文件的文件頭中
- ReDim aryContent(LOF(1) - 1) '重定義數(shù)組,為讀取文件做準備
- Get #1, , aryContent() '取得***文件的內(nèi)容到數(shù)組
- Put #100, , aryContent() '把***文件的內(nèi)容寫到合并文件中
- ReDim aryContent(LOF(2) - 1)
- Get #2, , aryContent()
- Put #100, , aryContent()
- '關閉文件
- Close #1
- Close #2
- Close #100
- End Sub
- ‘實現(xiàn)文件的拆分
- Private Sub SplitFile()
- Dim strFileName1 As String
- Dim strFileName2 As String
- Dim strFileSplit As String
- Dim aryContent() As Byte
- Dim lngLOF(1) As Long '存放從文件頭取得的兩個文件的長度
- strFileName1 = "c:\a2.bmp"
- strFileName2 = "c:\2.bmp"
- strFileSplit = "c:\out.bmp"
- Open strFileSplit For Binary As #100
- Get #100, , lngLOF(0) '取得***文件的長度
- Get #100, , lngLOF(1) '第二文件的長度
- Open strFileName1 For Binary As #1
- Open strFileName2 For Binary As #2
- ReDim aryContent(lngLOF(0)-1) '用***文件的長度重定義數(shù)組,為讀取***文件做準備
- Get #100, 9, aryContent() '從第9字節(jié),即文件后面開始讀取***文件的內(nèi)容
- Put #1, , aryContent() '把取得的內(nèi)容寫入到拆分文件中
- ReDim aryContent(lngLOF(1)-1)
- Get #100, 9 + lngLOF(0) + 1, aryContent() '從第9字節(jié)再加上***文件的長度處開始讀取第二文件的內(nèi)容,這里可以清楚地看到文件頭的作用了
- Put #2, , aryContent
- Close #1
- Close #2
- Close #100
- MsgBox "拆分完成。", vbInformation
文本文件由于沒有格式所以它的讀寫都比較簡單和直觀,而用二進制操作文件時其實質(zhì)就是對文件頭的理解,如果不知道文件頭的結構那就無法對文件進行處理了,知道了文件頭所包含的信息后,對文件的操作其實就是按規(guī)則進行Get、Put罷了。