GET(文件I/O)
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgGetfileio
- 最后更新: 2025-06-01
从文件读取数据到缓冲区
语法
Get #filenum As Long, [position As longint], ByRef data As Any [, [amount As Uinteger] [, ByRef bytesread As Uinteger] ]
Get #filenum As Long, [position As longint], data As String [, , ByRef bytesread As Uinteger ]
Get #filenum As Long, [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
写入数据的缓冲区。可以是数值变量、字符串、数组、用户自定义类型(包括通过 This 引用的)或解引用的指针。读取操作将尝试完整填充变量,除非到达 EOF。对于用户自定义类型实例,受影响的数据仅为非静态数据成员。
获取数组时,data 后应跟空括号:"()"。Get 将读取数组中所有值的数据。不允许使用 amount。
获取 String 时,读取的字节数与字符串数据的字节数相同。不允许使用 amount。
注意:如果要将值读入缓冲区,不应将指针传递给缓冲区;而应传递缓冲区中的第一个变量(可以通过使用 Operator *(Value of) 解引用指针来完成)。如果直接传递指针,则 Get 将覆盖指针变量,而不是它指向的内存。
amount
使 Get 从文件读取 amount 个连续变量到内存,即从文件读取 (amount * Sizeof(data)) 字节数据到从 data 内存位置开始的内存。若省略 amount,默认为 1,意味着 Get 只读取单个变量。
bytesread
用于接受从文件成功读取的字节数结果的无符号整数变量。
返回值
Get() 返回32位 Long:成功时为零(0);出错时为非零值。
注意:若读取时到达 EOF(文件末尾),Get 将返回成功。实际读取的字节数可通过传递 bytesread 变量来检查。
说明
从文件读取二进制数据到缓冲区变量
Get 可作为函数使用,成功时返回 0,失败时返回错误码。
对于以 Random 模式打开的文件,要读取的数据字节大小必须与指定的记录大小匹配。
*注意:
若将真实的 [w/z]string 变量传递给
Get,amount参数应被禁止,就像传递字符串时一样。请勿使用。否则它将被忽略(除了值 '0')。若将解引用的 [w/z]string 指针传递给
Get,amount参数不会像传递解引用的数值指针时那样被考虑。请勿使用。但与其遵循amount参数,指向的缓冲区开头必须至少有与要读取的元素数量相同的非零元素数量。为了更细粒度的控制,任何 [w/z]string 变量都可以通过提供第一个数值元素(索引 [w/z]string 变量,或解引用的 [w/z]string 指针再索引)和要处理的数值元素数量,安全地作为数值缓冲区传递给
Get。*
注意:
使用
Get #自然适合 Binary/Random 访问文件模式。在 Input 访问文件模式中也允许使用,但从未经过良好测试,结果可能有所不同。