Random
 
指定打开二进制模式的文件或设备

语法

Open filename for Random [Access access_type ] [Lock lock_type ] as [#]filenum [Len = record_length ]

参数

filename
文件名打开
access_type
指示文件是否可以被读取,写入或者两者
lock_type
锁定在文件打开时使用
filenum
未使用的文件编号与打开的文件关联
record_length
用于文件的记录的大小

说明

打开用于读取和/或写入给定文件filenum 中的二进制数据的文件或设备,其记录大小为record_length .
如果该文件不存在,将创建一个新文件,否则文件中存在的任何数据将由Open保留。该文件指针由文件开头的Open初始化,记录号为1.文件操作以record_length 字节为单位移动文件位置。
此文件模式使用用户定义的Type缓冲区变量来读/写文件中的完整记录。缓冲区变量用于包含多个字段。
数据以二进制模式保存,以与FreeBASIC相同的内部格式,通过Get #Put #使用。

filename 必须是字符串表达式,导致目标操作系统中没有通配符的合法文件名。该文件将在目录中寻求,除非给出了路径。
Access_type - 默认情况下,Random模式允许读取和写入文件,除非指定了Access类型,它必须是以下之一:
    • Read - 该文件仅打开输入
    • Write - 文件仅打开输出
    • Read Write - 文件打开输入和输出(默认)

Lock_type 表示文件被锁定用于其他进程(用户或线程)的方式,它是以下之一:
    • Shared - 文件可以被其他进程自由访问
    • Lock Read - 无法同时打开文件进行阅读
    • Lock Write - 无法同时打开文件进行写入
    • Lock Read Write - 其他进程无法同时打开该文件。
如果没有指定锁定类型,该程序的其他线程将为Shared,其他程序为Lock Read Write.
LockUnlock可用于限制对文件部分的临时访问。

filenum 是一个有效的FreeBASIC文件编号(范围1..255),不用于当前打开的任何其他文件。该数字标识文件的其余文件操作。可以使用FreeFile功能找到一个免费的文件号。

record_length 是文件指针将为每个单独GetPut移动的字节数,它必须与当Getting和Putting数据时使用的缓冲区变量的大小相匹配。如果省略,则默认为128.

例子

''此示例生成测试文件,然后允许您查看随机记录
''这是从文件中实时读取的。

Type Entry
    slen As Byte
    sdata As String * 10
End Type

Dim u As Entry
Dim s As String

Open "testfile的" For Random As #1 Len = SizeOf(Entry)

''用预定义数据写出9条记录
For i As Integer = 1 To 9
    Read s
    u = Type( Len(s), s )
    Put #1, i, u
Next

Data ".,-?!'@:", "ABC",      "高清"
Data "记录",      "JKL",      "MNO"
Data "PQRS",     "TUVen",      "WXYZ"

''让用户通过指定其索引号查看记录
Do
    Dim i As Integer
    Input "记录号:", i
    If i < 1 Or i > 9 Then Exit Do

    Get #1, i, u
    Print i & ":" & Left( u.sdata, u.slen )
    Print
Loop

Close #1


Type ScoreEntry Field = 1
    As String * 20 Name
    As Single score
End Type

Dim As ScoreEntry entry

''生成一个假无聊的高分文件
Open "scores.dat" For Random Access Write As #1 Len = SizeOf(entry)
For i As Integer = 1 To 10
    entry.name = "播放机" & i
    entry.score = i
    Put #1, i, entry
Next
Close #1

''读出并显示条目
Open "scores.dat" For Random Access Read As #1 Len = SizeOf(entry)
For i As Integer = 1 To 10
    Get #1, i, entry
    Print i & ":", entry.name, Str(entry.score), entry.score
Next
Close #1


与QB差别

  • 必须注意用户定义类型(UDT)中的动态或固定长度字符串,请参阅KeyPgType中的警告。
  • 关键字领域只能与类型一起使用,以指定UDT的包装。

参考