FileGet 函数
更新:2007 年 11 月
将数据从打开的磁盘文件读入到变量中。
在文件 I/O 操作中,My 功能具有比 FileGet 更高的效率和更好的性能。有关更多信息,请参见 My.Computer.FileSystem 对象。
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Object, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Double, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FileGet(
ByVal FileNumber As Integer, _
ByRef Value As String, _
Optional RecordNumber As Integer = -1, _
Optional StringIsFixedLength As Boolean = False _
)
参数
FileNumber
必需。任何有效文件号。Value
必需。将读入数据的有效变量名。RecordNumber
可选。开始读取处的记录号(Random 模式文件)或字节号(Binary 模式文件)。ArrayIsDynamic
可选。仅应用于写数组时。指定是否将数组视为动态的,以及是否需要数组说明符,用以描述数组大小和界限。StringIsFixedLength
可选。仅适用于写入字符串时。指定是否为描述长度的字符串写入一个双字节说明符。默认值为 False。
异常
异常类型 |
错误号 |
条件 |
---|---|---|
RecordNumber < 1 且不等于 -1。 |
||
FileNumber 不存在。 |
||
文件模式无效。 |
如果正在升级使用非结构化错误处理方式的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象) 比较错误号。)然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述代替这种错误控制。
备注
FileGet 只在 Random 和 Binary 模式中有效。
用 FileGet 读取的数据通常由 FilePut 写入文件。
文件的第一个记录或字节在位置 1,第二个记录或字节在位置 2,依此类推。如果省略 RecordNumber,则将读取上一个 FileGet 或 FilePut 函数后面的(或上一个 Seek 函数所指向的)下一个记录或字节。
安全说明: |
---|
从文件读取数据时,请不要根据文件扩展名判断文件的内容。例如,名为 Form1.vb 的文件不一定就是 Visual Basic 源文件。 |
随机模式
对于以 Random 模式打开的文件,适用下列规则:
如果所读取数据的长度小于 FileOpen 函数的 RecordLength 子句中指定的长度,那么 FileGet 沿记录长度边界读取后面的记录。一个记录的结尾与下一个记录开头之间的空白由文件缓冲区内的现有内容填充。由于无法确定填入的数据量,一般情况下,最好设法使记录的长度与读取的数据长度一致。
默认情况下,如果读入的变量为字符串,FileGet 将读取包含该字符串长度的双字节说明符,然后读取该变量中的数据。因此,由 FileOpen 函数的 RecordLength 子句指定的记录长度必须至少比字符串实际长度多两个字节。Visual Basic 6.0 和较早版本支持固定长度字符串,在放入文件时,不用写入长度说明符。如果想读取字符串而不带说明符,那么应将 True 传递到 StringIsFixedLength 参数,并且要读入的字符串长度应正确。
如果将读入的变量是数组,则可选择是否读取该数组的大小和维数的说明符。若要写入说明符,请将 ArrayIsDynamic 参数设置为 True。当读取数组时,必须与写入数组的方式匹配。如果写入数组时带说明符,则必须读取说明符。如果不使用说明符,则传入 FileGet 的数组大小和界限将用于确定要读取的内容。
说明符指定数组的秩、大小和每个秩的下限。其长度等于 2 加上 8 与维数的乘积:(2 + 8 * NumberOfDimensions)。由 FileOpen 函数中的 RecordLength 参数指定的记录长度必须大于或等于写入数组数据和数组说明符所需的全部字节的总和。例如,在将数组写入磁盘时,下列数组声明要求 218 字节的空间。
Dim MyArray(4,9) As Integer
218 字节分配如下:
18 字节用于说明符:(2 + 8 * 2)
200 字节用于数据:(5 * 10 * 4)。
如果读入的变量是任何其他类型的变量(不是变长字符串或对象),则 FileGet 只读取变量数据。由 FileOpen 函数中的 RecordLength 子句所指定的记录长度必须大于或等于正读取的数据长度。
FileGet 像分别读取每个元素一样读取结构的元素,只是元素之间没有空白。在磁盘上,用户定义类型的动态数组(用 FilePut 写入)以某说明符为前缀,其长度等于 2 加上维数的 8 倍:(2 + 8 * NumberOfDimensions)。由 FileOpen 函数中的 RecordLength 子句指定的记录长度必须大于或等于读取各个元素所需的全部字节的总和,其中包括任何数组及其说明符。VBFixedString 属性可应用于结构中的字符串字段,以指示写入磁盘时字符串的大小。
二进制模式
以 Binary 模式打开的文件适用大多数 Random 模式规则,仅有几个例外。适用于以 Binary 模式打开的文件的以下规则不同于适用于 Random 模式的规则:
FileOpen 函数中的 RecordLength 子句不会产生任何影响。FileGet 从磁盘连续读取所有变量;即,记录之间没有空白。
对于结构中的数组以外的任何数组,FileGet 仅读取数据。不读取说明符。
FileGet 读取变长字符串,这些字符串不是结构的元素,不需要双字节长度说明符。读取的字节数等于字符串中已有的字符数。
安全说明: 使用 FileGet 函数读取文件时,要求具备 FileIOPermissionAccess 枚举指定的 Read 访问权限。
智能设备开发人员说明
不支持此函数。
要求
**模块:**FileSystem
**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)