訪問文件中的字節(jié)構(gòu)成相同的一些記錄,每個(gè)記錄包含一個(gè)或多個(gè)字段,對(duì)于一個(gè)字段的記錄對(duì)應(yīng)于任一標(biāo)準(zhǔn)類型,隨機(jī)訪問文件中的所有記錄都必須具有相同長(zhǎng)度,如果實(shí)際字符串包含的字符少于將它寫入其中的字符串元素的固定長(zhǎng)度,則 Visual Basic 用空白(字符代碼 32)填充記錄中的尾隨空格。如果該字符串長(zhǎng)于字段大小,則 Visual Basic 截?cái)嗨?/P>
示例:用戶定義數(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用于定義字符串為固定長(zhǎng)度的字符串。 在打開一個(gè)文件進(jìn)行隨機(jī)操作訪問前,應(yīng)該定義一個(gè)類型該類型對(duì)應(yīng)該文件已包含或未包含的記錄。 打開要進(jìn)行隨機(jī)訪問的文件: FileOpen 函數(shù):FileOpen(FileNumber, FileName, OpenMode.Random, , , RecordLength) FileNumber 和 FileName 分別指定要打開的文件的編號(hào)和文件名。RecordLength 以字節(jié)為單位指定每條記錄的大小。如果 RecordLength 小于寫入文件的記錄的實(shí)際長(zhǎng)度,則會(huì)生成錯(cuò)誤。 示例:打開隨機(jī)訪問的文件。 Dim FileNum as Integer ,RecLength as Long, Aperson as Person ‘計(jì)算記錄的長(zhǎng)度 RecLength=Len(APerson) ‘獲得可用的文件號(hào) 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ù)來(lái)替換已經(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 ’ 隨機(jī)方式打開. FileOpen(1, "C:\example.txt", OpenMode.Binary) For recordNumber = 1 To 5 ’ MyRecord.ID = recordNumber ’ Define ID. MyRecord.Name = "My Name" & recordNumber ’創(chuàng)建一個(gè)字符串 FilePut(1, MyRecord) ’ 寫入文件 Next recordNumber FileClose(1) End Sub 以上代碼實(shí)現(xiàn)了隨機(jī)訪問的方式打開文件,并寫入記錄。
二進(jìn)制文件的操作
打開要進(jìn)行二進(jìn)制訪問的文件 FileOpen(FileNumber, FileName, OpenMode.Binary) 關(guān)閉要進(jìn)行二進(jìn)制訪問的文件 FileClose(FileNumber) 如果保持較小的文件大小很重要,則采用二進(jìn)制訪問。因?yàn)槎M(jìn)制訪問不要求固定長(zhǎng)度的字段,所以類型聲明可以省略字符串長(zhǎng)度參數(shù)。這使得以通過生成變長(zhǎng)記錄來(lái)節(jié)省磁盤空間。使用二進(jìn)制型訪問的類型定義為:
Structure Person dim ID As Integer dim Name As String dim MonthlySalary As Decimal dim Sex As String End Structure 使用變長(zhǎng)字段的二進(jìn)制輸入/輸出的缺點(diǎn)是無(wú)法隨機(jī)訪問記錄,而必須按順序訪問它們才能了解每條記錄的長(zhǎng)度。仍可直接轉(zhuǎn)到文件中的指定字節(jié)位置,但是如果字段是變長(zhǎng)的,則不知道哪個(gè)記錄位于哪個(gè)字節(jié)處。
|