訪問文件中的字節(jié)構成相同的一些記錄,每個記錄包含一個或多個字段,對于一個字段的記錄對應于任一標準類型,隨機訪問文件中的所有記錄都必須具有相同長度,如果實際字符串包含的字符少于將它寫入其中的字符串元素的固定長度,則 Visual Basic 用空白(字符代碼 32)填充記錄中的尾隨空格。如果該字符串長于字段大小,則 Visual Basic 截斷它。
示例:用戶定義數(shù)據(jù)類型: Structure Person Public ID As Integer Public MonthlySalary As Decimal <VBFixedString(15)> Public Name As String <VBFixedString(2)> Public Sex As String End Structure 其中VBFixedString用于定義字符串為固定長度的字符串。 在打開一個文件進行隨機操作訪問前,應該定義一個類型該類型對應該文件已包含或未包含的記錄。 打開要進行隨機訪問的文件: FileOpen 函數(shù):FileOpen(FileNumber, FileName, OpenMode.Random, , , RecordLength) FileNumber 和 FileName 分別指定要打開的文件的編號和文件名。RecordLength 以字節(jié)為單位指定每條記錄的大小。如果 RecordLength 小于寫入文件的記錄的實際長度,則會生成錯誤。 示例:打開隨機訪問的文件。 Dim FileNum as Integer ,RecLength as Long, Aperson as Person ‘計算記錄的長度 RecLength=Len(APerson) ‘獲得可用的文件號 FileNum=FreeFile() ‘打開文件 FileOpen(FileNum,”c:\example.txt”,OpenMode.random,,,Reclenght) 打開文件之后就可以把記錄讀入變量中,使用FileGet函數(shù)。 示例:從文件中讀取第一條記錄 Dim FileNum as Integer ,RecLength as Long, Aperson as Person RecLength=Len(APerson) FileNum=FreeFile() FileOpen(FileNum,”c:\example.txt”,OpenMode.random,,,Reclenght) FileGet(FileNum,Aperson,1); Console.WriteLine(Aperson.Id) Console.WriteLine(Aperson.Name) Console.WriteLine(Aperson.Sex) Console.WriteLine(Aperson.MonthlySalary) FileClose(FileNum)
寫入記錄:通過FilePut函數(shù)來替換已經(jīng)存在的記錄或新增記錄 示例:寫入五條記錄到文件中: ‘自定義數(shù)據(jù)類型
Structure Person Public ID As Integer Public Name As String End Structure
Sub WriteData() Dim MyRecord As Person Dim recordNumber As Integer ’ 隨機方式打開. FileOpen(1, "C:\example.txt", OpenMode.Binary) For recordNumber = 1 To 5 ’ MyRecord.ID = recordNumber ’ Define ID. MyRecord.Name = "My Name" & recordNumber ’創(chuàng)建一個字符串 FilePut(1, MyRecord) ’ 寫入文件 Next recordNumber FileClose(1) End Sub 以上代碼實現(xiàn)了隨機訪問的方式打開文件,并寫入記錄。
二進制文件的操作
打開要進行二進制訪問的文件 FileOpen(FileNumber, FileName, OpenMode.Binary) 關閉要進行二進制訪問的文件 FileClose(FileNumber) 如果保持較小的文件大小很重要,則采用二進制訪問。因為二進制訪問不要求固定長度的字段,所以類型聲明可以省略字符串長度參數(shù)。這使得以通過生成變長記錄來節(jié)省磁盤空間。使用二進制型訪問的類型定義為:
Structure Person dim ID As Integer dim Name As String dim MonthlySalary As Decimal dim Sex As String End Structure 使用變長字段的二進制輸入/輸出的缺點是無法隨機訪問記錄,而必須按順序訪問它們才能了解每條記錄的長度。仍可直接轉到文件中的指定字節(jié)位置,但是如果字段是變長的,則不知道哪個記錄位于哪個字節(jié)處。
|