VB中檔案操作的兩種方式 (轉)

worldblog發表於2007-12-13
VB中檔案操作的兩種方式 (轉)[@more@]

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章