从文件读取数据到缓冲区
语法
Get #filenum As Integer, [position As LongInt], ByRef data As Any [, [amount As Integer] [, ByRef bytesread As UInteger] ]
Get #filenum As Integer, [position As LongInt], data As String [, , ByRef bytesread As UInteger ]
Get #filenum As Integer, [position As LongInt], data() As Any [, , ByRef bytesread As UInteger ]
用法
Get #filenum , position , data [, [amount ] [, bytesread ] ]
varres = Get (#filenum , position , data [, [amount ] [, bytesread ] ] )
参数
filenum
position
阅读必须开始的位置。如果文件已打开
For Random,则该位置在记录中;否则,它是以字节为单位。如果省略,则从当前文件指针位置开始读取。位置是1:即文件的第一个记录或字节位于
1.
如果省略
position 或零(
0),文件读取将从当前文件位置开始。
data
写入数据的缓冲区它可以是数字变量,字符串,数组,用户定义的类型或取消引用的指针。读取操作将尝试完全填充变量,除非达到
EOF.
获取数组时,
data 后面应该有一个空的方括号:“
()”。
Get将读取数组中所有值的数据。
amount 不允许。
获取
String时,读取的字节数与字符串数据中的字节数相同。
amount 不允许。
注意:如果要将值读入缓冲区,则不应将指针传递给缓冲区;而是应该在缓冲区中传递第一个变量。(这可以通过使用
操作符 * (Value Of)取消引用指针来实现。)如果直接传递指针,则
Get将覆盖指针变量,而不是其指向的内存。
amount
使
Get从文件到内存中读取
amount 个连续变量,即它从
data 的内存位置开始,将
(amount * SizeOf(data ) )个数据从文件读取到内存中。如果省略
amount ,则默认为
1,这意味着
Get只读取单个变量。
bytesread
一个无符号整数变量,用于接受从文件中成功读取的字节数的结果。
返回值
零(
0)成功;非零错误。注意:如果
EOF(文件结尾)在阅读时到达,则
Get将返回成功。通过传递
bytesread 变量可以检查实际读取的字节数。
说明
从文件读取二进制数据到缓冲区变量
Get可以作为一个功能使用,并且将成功返回
0或失败时的错误代码。
对于以
Random模式打开的文件,要读取的数据的大小(以字节为单位)必须与指定的记录大小相匹配。
例子
Dim Shared f As Integer
Sub get_integer()
Dim buffer As Integer '整数变量
'从文件读取一个整数(4字节)到缓冲区中,使用文件号“f”。
Get #f, , buffer
'打印出结果
Print buffer
Print
End Sub
Sub get_array()
Dim an_array(0 To 10-1) As Integer '整数数组
'从文件读取10个整数(10 * 4 = 40字节)到an_array,使用文件编号“f”。
Get #f, , an_array()
'打印出结果
For i As Integer = 0 To 10-1
Print an_array(i)
Next
Print
End Sub
Sub get_mem
Dim pmem As Integer Ptr
'为5个整数赋值内存
pmem = Allocate(5 * SizeOf(Integer))
'从文件读取5个整数(5 * 4 = 20个字节)到赋值的内存中
Get #f, , *pmem, 5 '注意pmem必须被取消引用(* pmem或pmem [0]??)
'使用[]指针索引打印输出结果
For i As Integer = 0 To 5-1
Print pmem[i]
Next
Print
'免费的指针内存来防止内存泄漏
Deallocate pmem
End Sub
'找到第一个免费的文件文件编号。
f = FreeFile
'打开文件“file.ext”进行二进制使用,使用文件号“f”。
Open "file.ext" For Binary As #f
get_integer()
get_array()
get_mem()
'关闭文件。
Close #f
'将一个小文本文件加载到一个字符串
Function LoadFile(ByRef filename As String) As String
Dim h As Integer
Dim txt As String
h = FreeFile
If Open( filename For Binary Access Read As #h ) <> 0 Then Return ""
If LOF(h) > 0 Then
txt = String(LOF(h), 0)
If Get( #h, ,txt ) <> 0 Then txt = ""
End If
Close #h
Return txt
End Function
Dim ExampleStr As String
ExampleStr = LoadFile("smallfile.txt")
Print ExampleStr
与QB差别
- FB中的得到可以像VB一样读取完整的数组,或者将数据大小的倍数读入存储器。
- 得到可以用作FB中的函数,以查找返回的成功/错误代码,而无需使用错误处理过程。
- FB允许bytesread 参数,以检查已成功读入多少字节。
参考