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中目前的字節數  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM