二进制文件的操作
所有文件的存儲其實質都是二進制的,二進制文件往往由兩部分組成,一部分是文件頭另一部分存放了文件的內容。
文件頭通常存放與文件格式有關的信息,以BMP等圖象文件為例,它們的文件頭中存放了是何種圖形格式、圖象大小、調色板等信息,要顯示圖象時先讀取文件頭以獲得文件的詳細信息,然后再按其格式把圖象內容顯示出來。
用二進制方式可以操作任何的文件,當然至關重要的一點是要清楚了解所操作文件的文件頭結構。
VB中二進制文件操作主要應用的方法和函數有:Open,Close,Get,Put等。
Open:在For后面的打開模式要用Binary。
Close:關閉文件。
Get:在指定位置取得文件的內容,如果省略位置則從當前位置讀取。
Put:在指定位置寫入文件,如果省略位置參數就從當前位置寫。
下面結合代碼講解二進制文件的操作。
下述程序完成了將兩個文件結合成一個文件以及將這個結合后的文件再拆分成原來的兩個文件。文件頭的結構是自己定義的,非常簡單,共8個字節(也就是兩個長整型的長度),前4個字節存放第一個文件的長度,后4個字節存放第二個文件的長度。為了更直觀地表達文件的結構,現假設有兩個文件,第一個文件長度是100字節,第二個文件是200字節,那么合并后得到的文件應該是308字節。按順序來看,文件的結構是:
4第一文件的長度
4第二文件的長度
100第一文件的二進制內容
200第二文件的二進制內容
除了文件頭的8字節長度是固定的后面的長度都會因文件的不同而變化的。
‘實現文件的合并
Private Sub MergeFile()
Dim strFileName1 As String '第一個文件
Dim strFileName2 As String '第二個文件
Dim strOutput As String '合并后的文件
Dim aryContent() As Byte '用來讀取文件的數組,每次讀取前要重定義
strFileName1 = "c:\a.bmp"
strFileName2 = "c:\b.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) '重定義數組,為讀取文件做準備
Get #1, , aryContent() '取得第一文件的內容到數組
Put #100, , aryContent() '把第一文件的內容寫到合并文件中
ReDim aryContent(LOF(2) - 1)
Get #2, , aryContent()
Put #100, , aryContent()
'關閉文件
Close #1
Close #2
Close #100
End Sub
‘實現文件的拆分
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:\b2.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) '用第一文件的長度重定義數組,為讀取第一文件做準備
Get #100, 9, aryContent() '從第9字節,即文件后面開始讀取第一文件的內容
Put #1, , aryContent() '把取得的內容寫入到拆分文件中
ReDim aryContent(lngLOF(1)-1)
Get #100, 9 + lngLOF(0) + 1, aryContent() '從第9字節再加上第一文件的長度處開始讀取第二文件的內容,這里可以清楚地看到文件頭的作用了
Put #2, , aryContent
Close #1
Close #2
Close #100
MsgBox "拆分完成。", vbInformation
文本文件由于沒有格式所以它的讀寫都比較簡單和直觀,而用二進制操作文件時其實質就是對文件頭的理解,如果不知道文件頭的結構那就無法對文件進行處理了,知道了文件頭所包含的信息后,對文件的操作其實就是按規則進行Get、Put罷了。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
文件頭通常存放與文件格式有關的信息,以BMP等圖象文件為例,它們的文件頭中存放了是何種圖形格式、圖象大小、調色板等信息,要顯示圖象時先讀取文件頭以獲得文件的詳細信息,然后再按其格式把圖象內容顯示出來。
用二進制方式可以操作任何的文件,當然至關重要的一點是要清楚了解所操作文件的文件頭結構。
VB中二進制文件操作主要應用的方法和函數有:Open,Close,Get,Put等。
Open:在For后面的打開模式要用Binary。
Close:關閉文件。
Get:在指定位置取得文件的內容,如果省略位置則從當前位置讀取。
Put:在指定位置寫入文件,如果省略位置參數就從當前位置寫。
下面結合代碼講解二進制文件的操作。
下述程序完成了將兩個文件結合成一個文件以及將這個結合后的文件再拆分成原來的兩個文件。文件頭的結構是自己定義的,非常簡單,共8個字節(也就是兩個長整型的長度),前4個字節存放第一個文件的長度,后4個字節存放第二個文件的長度。為了更直觀地表達文件的結構,現假設有兩個文件,第一個文件長度是100字節,第二個文件是200字節,那么合并后得到的文件應該是308字節。按順序來看,文件的結構是:
4第一文件的長度
4第二文件的長度
100第一文件的二進制內容
200第二文件的二進制內容
除了文件頭的8字節長度是固定的后面的長度都會因文件的不同而變化的。
‘實現文件的合并
Private Sub MergeFile()
Dim strFileName1 As String '第一個文件
Dim strFileName2 As String '第二個文件
Dim strOutput As String '合并后的文件
Dim aryContent() As Byte '用來讀取文件的數組,每次讀取前要重定義
strFileName1 = "c:\a.bmp"
strFileName2 = "c:\b.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) '重定義數組,為讀取文件做準備
Get #1, , aryContent() '取得第一文件的內容到數組
Put #100, , aryContent() '把第一文件的內容寫到合并文件中
ReDim aryContent(LOF(2) - 1)
Get #2, , aryContent()
Put #100, , aryContent()
'關閉文件
Close #1
Close #2
Close #100
End Sub
‘實現文件的拆分
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:\b2.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) '用第一文件的長度重定義數組,為讀取第一文件做準備
Get #100, 9, aryContent() '從第9字節,即文件后面開始讀取第一文件的內容
Put #1, , aryContent() '把取得的內容寫入到拆分文件中
ReDim aryContent(lngLOF(1)-1)
Get #100, 9 + lngLOF(0) + 1, aryContent() '從第9字節再加上第一文件的長度處開始讀取第二文件的內容,這里可以清楚地看到文件頭的作用了
Put #2, , aryContent
Close #1
Close #2
Close #100
MsgBox "拆分完成。", vbInformation
文本文件由于沒有格式所以它的讀寫都比較簡單和直觀,而用二進制操作文件時其實質就是對文件頭的理解,如果不知道文件頭的結構那就無法對文件進行處理了,知道了文件頭所包含的信息后,對文件的操作其實就是按規則進行Get、Put罷了。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
- 上一篇: 最小拍控制系统详细解读(阶跃输入+速度输
- 下一篇: java 简单的加法 递归 从A加到B