指定打开二进制模式的文件或设备
语法
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.
Lock和
Unlock可用于限制对文件部分的临时访问。
是一个有效的FreeBASIC文件编号(范围
1..255),不用于当前打开的任何其他文件。该数字标识文件的其余文件操作。可以使用
FreeFile功能找到一个免费的文件号。
record_length 是文件指针将为每个单独
Get和
Put移动的字节数,它必须与当
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的包装。
 
 
 参考