VB Open 函式詳解 開啟、關閉、讀、寫檔案
(一)開啟和關閉檔案
1、順序檔案
開啟順序檔案,我們可以使用Open語句。它的格式如下:
Open pathname For [Input |Output |Append] As [#]filenumber [Len = buffersize]
說明:
(1)引數pathname 表示要開啟的檔名,檔名可以包含有驅動器和目錄
(2)Input Output 和Append用於設定順序檔案的開啟方式。其中,Input表示從開啟的檔案中讀取資料。以這種方式開啟檔案時,檔案必須存在,否則會產生錯誤。Output表示向開啟的檔案中寫入資料。以這種方式開啟檔案時,檔案中原有的資料將被覆蓋,新的資料將從檔案開始寫入。如果檔案不存在,則建立一個新檔案。Append表示向開啟的檔案中新增資料。以這種方式開啟時,檔案中原有的資料將被保留,新的資料將從檔案為開始新增。如果檔案不存在,則建立一個新檔案。
(3)As[#]filenumber 子句用於為開啟的檔案指定檔案號.對檔案進行讀寫操作時,要用檔案號表示該檔案.檔案號是介於1~511之間的整數,既可以是數字,又可以是變數.也可以省略不用.
(4)當在檔案與程式之間拷貝資料時,Len=buffersize子句指定緩衝區的字元數.
例如:
Open App.Path + "\test.dat" For Output As 1
Open App.Path + "\test.dat" For Output As 1
這兩句程式碼在當前應用程式所在目錄下建立了一個名為test.dat的文字檔案,分配檔案號為1.
Open App.Path + "\test.dat" For Input As [#]filenumber
這條語句是從文字檔案中讀取資料.
Open App.Path + "\test.dat" For Append As [#]filenumber
這條語句則是像文字檔案中新增資料
2、隨機檔案
操作隨機檔案之前,首先必須定義用於儲存資料項的記錄型別.該記錄是使用者自定義資料型別,他們是隨機檔案中儲存資料的基本結構.例如:
Type Student
No As Integer
Name As String * 20
age As Integer
End Type
Dim Stud As Student ‘定義一個可以存放學生材料的變數
隨機檔案中,所有的資料都將儲存到若干個結構為Student型別的記錄中, 而從隨機檔案中讀出的資料則可以存放到變數Stud中.
之後我們就可以開啟並讀寫檔案了.下面是開啟隨機檔案的語法格式:
Open filename For Random as [#]filenumber Len = Reclength
說明:
(1)引數filename 和filenumber 分別表示檔名或檔案號.
(2)關鍵字Random 表示開啟的是隨機檔案
(3)Len子句用於設定記錄長度,長度由引數Reclength指定.Reclength的值必須大於0,而且必須與定義的記錄結構的長度一致.計算記錄長度的方法是將記錄結構中每個元素的長度相加.例如前面宣告的Student的長度應該是2+20+2=24位元組.
開啟一個記錄型別為Student 的隨機檔案的方法是:
Open "c:\Student.txt " For Random As #1 Len = 25
3、二進位制檔案
開啟二進位制檔案的語法格式如下:
Open pathname For Binary As [#]filenumber
說明:
(1) 引數filename 和filenumber 分別表示檔名或檔案號.
(2)關鍵字Binary 表示開啟的是二進位制檔案
(3)對於二進位制檔案,不能指定位元組長度.每個開啟的二進位制檔案都有一個自己的指標,檔案指標是一個數字值,指向下一次讀寫操作的檔案中的位置.二進位制檔案中的每個”位置”對應一個數據位元組,因此,有n個位元組的檔案,就有1到n個位置.
我們可以用Seek()函式返回當前的檔案指標位置(即下一個要讀寫的位元組 );用Loc()函式返回上一次讀寫的位元組位置,除非用Seek語句移動了指標,Loc()返回值總比Seek()的小1.我們來看下面的例子:
Open “student.txt” for Binary as #1
該語句用二進位制的方式打開了student.txt檔案.
(二)讀檔案
1、順序檔案
順序檔案的讀取有三種方式:
(1)Line Input # 語句
該語句從開啟的順序檔案中讀取一行資料。這裡的一行指的是從當前指標位置開始到回車符或回車換行符之間的所有資料。Line Input # 語句的語法格式如下:
Line Input # 檔案號,變數號
說明:“檔案號”是開啟檔案時所用的檔案號;“變數號”使用來存放讀出資料的一個或多個變數,如果有多個變數,中間用空格分割開。Input# 語句為引數列表中的每一個變數讀取檔案的一個域,並將讀出的域存入變數中。該語句只能順序的從第一個域開始,直到讀取想要的域。
請看下面程式碼:
Dim strLine As String
Open "c:\vb\test.txt" For Input As #1
Do Until EOF(1)
Line Input #1, strLine
text1.Text = text1.Text + strLine + Chr(13) + Chr(10)
Loop
Close #1
此段程式碼逐行讀取一個檔案到文字框中。
(2)Input函式
此函式可以從順序檔案中一次讀取指定長度的字串。具體地說,就是從檔案的當前位置開始,讀取指定個數的字元,然後將他們返回。Input函式可以讀取包括換行符,回車符,空格符等在內的各種字元。下面是它的語法格式:
變數 = Input(串長度,檔案號)
例如,要從一個開啟檔案中讀取12個字元並複製到變數file中,我們可以這樣寫:
file = Input(12,filenum)
如果要將整個檔案複製到變數,請使用InputB函式將位元組從檔案複製到變數。由於InputB函式返回一個ASCII字串,因此,必須用StrCopy函式將ASCII字串轉換為Unicode字串。程式碼如下:
file = StrCopy (Input (LOF(filenanum),filenum),vbUnicode)
(3)Input # 語句
Input #語句可以從檔案中同時向多個變數內讀入資料,而且讀入的資料可以是不同型別的。
下面使它的語法格式:
Input # 檔案號,變數列表
例如,我們要在檔案student.txt中寫入資料,下面是程式碼:
Open "student.txt" For Output As #filenum
Write #filenum, "張三", "初一年級", 14
Write #filenum, "李四", "職業高中", 18
Dim name As String, nianji As String, age As Integer
Dim name1 As String, nianji1 As String, age1 As Integer
Open "student.txt" For Input As #filenum
Input #filenum, name, nianji, age
Input #filenum, name1, nianji1, age1
Close #filenum
執行結果:
name=”張三” ,nianji = “初一年級” ,age =14
name=”李四” ,nianji = “職業高中” ,age =18
2、隨機檔案
讀取隨機檔案是可以使用Get # 語句,資料從檔案的一個指定記錄中讀出後,存入一個使用者自定義的變數中.
語法格式: Get # FileNum ,[RecNum],UserType
說明:
(1)FileNum 是要開啟的檔案號;RecNum是要讀取的記錄號,若省略,則讀取下一個記錄
(2)UserType 是一個用來存放讀出資料的使用者自定義的資料型別變數.
下面是一個例子:
Get # 1,5,Student
該語句讀取檔案號為1的檔案中的第5條記錄.
3、二進位制檔案
讀寫二進位制檔案的方法和讀寫隨機檔案的方法基本相同,下面是相關的語句格式及其說明:
格式: Get [#]fileNumber ,[Pos], Var
功能: 用二進位制方式,從檔案的中指定的位置開始讀取,所給變數長度的資料
說明:
(1)FileNumber是以二進位制方式開啟的檔案號.
(2)Pos用來指定讀寫操作發生時的位元組位置,若省略,則使用當前檔案指標位置.
(3)Var是用來存放讀出的資料的變數.該語句會自動根據var變數包含的位元組長度讀取適當的檔案,如果Var是一個可變長度的字串變數,則傳送的位元組數等於Var中目前的位元組數.對於檔案長度的判斷我們可以使用Lof()函式,Eof()函式檢查檔案的結尾位置.
下面的程式碼複製studert.txt檔案到student1.txt檔案中
Dim ar As String * 1, i As Integer
Open "c:\student.txt" For Binary As #1
Open "c:\student2.txt" For Binary As #2
For i = 1 To LOF(1)
Get #1, , ar
Put #2, , ar
Next i
Close #1, #2
(三)寫檔案
1、 順序檔案
寫順序檔案我們可以用Write # 和Print #語句向一個已經開啟的檔案中寫入資料.
下面是他們的格式和說明:
Print # 的語法格式:
Print # 檔案號,變數列表
例如,將文字框中的文字寫到檔案中,程式碼如下:
Open "file.txt" For Output As #filenum
Input #filenum, text1.text
Write # 語句的語法格式:
Write # 檔案號,變數列表
說明:用Write # 語句寫入的資訊便於以後用Input #語句來讀取資料,因為Write #語句自動將寫入到檔案中的資訊用逗號分開,併為字串資料加上雙引號.例如:
Open "student.txt" For Output As #filenum
Write #filenum, "張三", "初一年級", 14
Write #filenum, "李四", "職業高中", 18
2、 隨機檔案
向隨機檔案中寫入資料,使用Put #語句.語法格式如下:
Put [#] FileNum ,[RecNum],UserType
說明:
(1) FileNum 是要開啟的檔案號;RecNum是要寫入的記錄號,若省略,則再上一次用Get 和Put語句所讀寫過的記錄的後一條記錄中寫入,如果沒有執行過Get 和Put語句,就從第一條記錄開始
(2)UserType 是包含要寫入資料的使用者自定義的資料型別變數.例如:我們向前面的student.txt檔案中的第5個記錄寫入資料,可用這些語句:
stud.No = 0301
stud.Name = “王武”
stud.Age =20
Put #1 ,5,stud
如果要插入的資料不只一兩條的話,首先要確定檔案和每條記錄的長度,這樣就可以計算出檔案中究竟有多少條記錄.我們可以用Lof()函式返回檔案的長度,Len()函式返回每個記錄的長度,計算檔案中的記錄個數可以用檔案的長度除以給個記錄的長度.示例如下:
Nextrec= (Lof(1)\Len(UserType))+1
Put #1,Nextrec,UserType
3、二進位制檔案
下面是以二進位制方式寫入檔案的語句格式及其說明:
格式:
Put [#]fileNumber ,[Pos], Var
功能: 用二進位制方式,從檔案的中指定的位置開始寫入,所給變數長度的資料
說明:
(1)FileNumber是以二進位制方式開啟的檔案號.
(2)Pos用來指定寫操作發生時的位元組位置,若省略,則使用當前檔案指標位置.
(3)Var是用來存放寫入的資料的變數.該語句會自動根據var變數包含的位元組長度寫入檔案,如果Var是一個可變長度的字串變數,則傳送的位元組數等於Var中目前的位元組數