指定打开二进制模式的文件或设备
语法
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可用于限制对文件部分的临时访问。
filenum 是一个有效的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的包装。
参考