訪問(wèn)文件中的字節(jié)構(gòu)成相同的一些記錄,每個(gè)記錄包含一個(gè)或多個(gè)字段,對(duì)于一個(gè)字段的記錄對(duì)應(yīng)于任一標(biāo)準(zhǔn)類型,隨機(jī)訪問(wèn)文件中的所有記錄都必須具有相同長(zhǎng)度,如果實(shí)際字符串包含的字符少于將它寫(xiě)入其中的字符串元素的固定長(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)度的字符串。 在打開(kāi)一個(gè)文件進(jìn)行隨機(jī)操作訪問(wèn)前,應(yīng)該定義一個(gè)類型該類型對(duì)應(yīng)該文件已包含或未包含的記錄。 打開(kāi)要進(jìn)行隨機(jī)訪問(wèn)的文件: FileOpen 函數(shù):FileOpen(FileNumber, FileName, OpenMode.Random, , , RecordLength) FileNumber 和 FileName 分別指定要打開(kāi)的文件的編號(hào)和文件名。RecordLength 以字節(jié)為單位指定每條記錄的大小。如果 RecordLength 小于寫(xiě)入文件的記錄的實(shí)際長(zhǎng)度,則會(huì)生成錯(cuò)誤。 示例:打開(kāi)隨機(jī)訪問(wèn)的文件。 Dim FileNum as Integer ,RecLength as Long, Aperson as Person ‘計(jì)算記錄的長(zhǎng)度 RecLength=Len(APerson) ‘獲得可用的文件號(hào) FileNum=FreeFile() ‘打開(kāi)文件 FileOpen(FileNum,”c:\example.txt”,OpenMode.random,,,Reclenght) 打開(kāi)文件之后就可以把記錄讀入變量中,使用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)
寫(xiě)入記錄:通過(guò)FilePut函數(shù)來(lái)替換已經(jīng)存在的記錄或新增記錄 示例:寫(xiě)入五條記錄到文件中: ‘自定義數(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ī)方式打開(kāi). 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) ’ 寫(xiě)入文件 Next recordNumber FileClose(1) End Sub 以上代碼實(shí)現(xiàn)了隨機(jī)訪問(wèn)的方式打開(kāi)文件,并寫(xiě)入記錄。
二進(jìn)制文件的操作
打開(kāi)要進(jìn)行二進(jìn)制訪問(wèn)的文件 FileOpen(FileNumber, FileName, OpenMode.Binary) 關(guān)閉要進(jìn)行二進(jìn)制訪問(wèn)的文件 FileClose(FileNumber) 如果保持較小的文件大小很重要,則采用二進(jìn)制訪問(wèn)。因?yàn)槎M(jìn)制訪問(wèn)不要求固定長(zhǎng)度的字段,所以類型聲明可以省略字符串長(zhǎng)度參數(shù)。這使得以通過(guò)生成變長(zhǎng)記錄來(lái)節(jié)省磁盤(pán)空間。使用二進(jìn)制型訪問(wè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ī)訪問(wèn)記錄,而必須按順序訪問(wèn)它們才能了解每條記錄的長(zhǎng)度。仍可直接轉(zhuǎn)到文件中的指定字節(jié)位置,但是如果字段是變長(zhǎng)的,則不知道哪個(gè)記錄位于哪個(gè)字節(jié)處。
|