Get (File I/O)
 
从文件读取数据到缓冲区

语法

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
该文件打开时传递给Open的值。
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 参数,以检查已成功读入多少字节。

参考