VB中檔案操作的兩種方式 (轉)
VB中操作的兩種方式:namespace prefix = o ns = "urn:schemas--com::office" />
- 文字檔案的操作
此種方式是以行為單位進行讀取的基本單位,主要應用的方法和有Open,Close,Line Input,FreeFile,EOF等。下面先簡述其功能然後結合程式碼示例進行說明。
Open:顧名思義,它的作用是開啟檔案,換而言之開啟某個檔案就是獲得某個的控制權,一般情況下當檔案處於開啟狀態時只有開啟者才能對它進行操作。開啟檔案時要指定一個整數作為檔案號,以後的操作都是針對這個代號進行的,而不是針對檔名。檔案號也叫控制程式碼,在中一個檔案號只能指向一個檔案,不能出現兩個檔案同時具有相同控制程式碼的情況。
Close:關閉檔案,即釋放檔案的控制權。
Line Input:以行為單位取得檔案內容,以行為單位是指從當前位置開始到下一個換行符為止的內容。換行符是Chr(13) & Chr(10)兩個位元組組成,VB中已定義了常量vbCrLf,可直接使用。要注意的是Line Input讀取一行時會把行尾的換行符去掉,因此我們在讀取每行內容時要記得補上換行符才能保持得到的內容與檔案一致。
FreeFile:得到空閒的檔案號,用這個函式取得檔案號可以避免檔案號的衝突。
例如:
Dim strFileName As String '檔名
Dim lngHandle As Long '檔案控制程式碼
Dim strAll As String '所讀取的文字檔案的所有內容
Dim strLine As String '在迴圈中存放每行的內容
strFileName = "c:b.txt"
'獲得檔案的控制程式碼
lngHandle = FreeFile()
'For後面的參數列示以何種方式開啟檔案,Input是讀取,Output是覆蓋寫入,Append是追加寫入
Open strFileName For Input As lngHandle
'迴圈直到檔案尾
Do While Not EOF(lngHandle)
'每次讀取一行存放在strLine變數中
Line Input #lngHandle, strLine
'每次讀取都把所讀到的內容連線到strAll變數,由於Line Input去掉了換行符,所以這裡補上
strAll = strAll & strLine & vbCrLf
L
'顯示得到的全部分內容
MsgBox strAll, vbInformation
對文字檔案的寫入相對簡單些,有三個步驟:開啟檔案,寫入文字,關閉檔案。
程式碼示例:
Dim strFileName As String '檔名
Dim lngHandle As Long '控制程式碼
Dim strWrite As String '要寫入的文字內容
strFileName = "c:w.txt"
lngHandle = FreeFile() '取得控制程式碼
'準備要寫入的內容
strWrite = "落日樓頭,斷鴻聲裡,江南遊子。把吳鉤看了,欄干拍遍,無人會、登臨意。"
Open strFileName For Output As lngHandle '開啟檔案
Print #lngHandle, strWrite '寫入文字
Close lngHandle '關閉檔案
MsgBox "寫入完成。", vbInformation
- 二進位制檔案的操作
所有檔案的其實質都是二進位制的,二進位制檔案往往由兩部分組成,一部分是檔案頭另一部分存放了檔案的內容。檔案頭通常存放與檔案格式有關的資訊,以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罷了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992720/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- base64轉file檔案的兩種方式
- 在VB中實現任意檔案的16進位制方式察看 (轉)
- java 利用FileOutputStream寫檔案(兩種方式)Java
- 在lua中操作http請求有兩種方式HTTP
- asp.net 中兩種不同方式檔案流下載的區別?ASP.NET
- sparkrdd轉dataframe的兩種方式Spark
- Windows從命令列建立文字檔案的兩種方式Windows命令列
- java中多種方式讀檔案Java
- VB原始碼推薦:一個操作Ini檔案的類 (轉)原始碼
- 在 NetBeans 中打包 Maven 專案的兩種方式BeanMaven
- Java中對檔案的操作 (轉)Java
- Oracle中兩種認證方式:OS認證與口令檔案認證Oracle
- Java中建立並寫檔案的5種方式Java
- Vb下呼叫Help檔案 (轉)
- VB讀寫ini檔案 (轉)
- 用vb操作檔案或資料夾
- vb操作Word[兩個過程]
- 在VB中使用檔案物件 (轉)物件
- Win XP中搜尋隱藏檔案的兩種方法(轉)
- 三種引入javascript檔案的方式JavaScript
- 檔案上傳的幾種方式
- vue3使用ElementPlus upload上傳檔案的兩種方式Vue
- 兩種include方式及filter中的dispatcher解析Filter
- 總結java中建立並寫檔案的5種方式Java
- C#實現Web檔案上傳的兩種方法(轉)C#Web
- Groovy獲取Bean兩種方式(奇淫技巧操作)Bean
- C#轉義字元的兩種處理方式C#字元
- java io 多種檔案操作方式(位元組、字元、行、隨機)Java字元隨機
- java.util.Arrays.sort兩種方式的排序(及檔案讀寫練習)Java排序
- ChatTTS的兩種使用方式TTS
- oracle中的檔案操作Oracle
- java中四種操作xml方式的比較JavaXML
- hibernate中建立session的兩種方式方式,區別在哪裡?Session
- JavaScript~檔案下載的幾種方式JavaScript
- php讀取檔案的幾種方式PHP
- vue引用js檔案的多種方式VueJS
- Java檔案下載的幾種方式Java
- Java多種寫檔案方式Java