访问文件中的字节构成相同的一些记录,每个记录包含一个或多个字段,对于一个字段的记录对应于任一标准类型,随机访问文件中的所有记录都必须具有相同长度,如果实际字符串包含的字符少于将它写入其中的字符串元素的固定长度,则 Visual Basic 用空白(字符代码 32)填充记录中的尾随空格。如果该字符串长于字段大小,则 Visual Basic 截断它。
示例:用户定义数据类型: 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 函数:FileOpen(FileNumber, FileName, OpenMode.Random, , , RecordLength) FileNumber 和 FileName 分别指定要打开的文件的编号和文件名。RecordLength 以字节为单位指定每条记录的大小。如果 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函数。 示例:从文件中读取第一条记录 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函数来替换已经存在的记录或新增记录 示例:写入五条记录到文件中: ‘自定义数据类型
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 ’创建一个字符串 FilePut(1, MyRecord) ’ 写入文件 Next recordNumber FileClose(1) End Sub 以上代码实现了随机访问的方式打开文件,并写入记录。
二进制文件的操作
打开要进行二进制访问的文件 FileOpen(FileNumber, FileName, OpenMode.Binary) 关闭要进行二进制访问的文件 FileClose(FileNumber) 如果保持较小的文件大小很重要,则采用二进制访问。因为二进制访问不要求固定长度的字段,所以类型声明可以省略字符串长度参数。这使得以通过生成变长记录来节省磁盘空间。使用二进制型访问的类型定义为:
Structure Person dim ID As Integer dim Name As String dim MonthlySalary As Decimal dim Sex As String End Structure 使用变长字段的二进制输入/输出的缺点是无法随机访问记录,而必须按顺序访问它们才能了解每条记录的长度。仍可直接转到文件中的指定字节位置,但是如果字段是变长的,则不知道哪个记录位于哪个字节处。
|