ZetCode

FreeBasic EOF 关键字

最后修改日期:2025 年 6 月 16 日

FreeBasic 的 EOF 函数用于在读取文件时检查是否已到达文件末尾。它对于安全地处理文件至关重要,可以防止读取超出文件末尾的数据。

基本定义

EOF 是 "End Of File"(文件结束)的缩写。在 FreeBasic 中,它是一个函数,返回一个布尔值,指示是否已到达文件末尾。

该函数以文件句柄作为参数,如果到达文件末尾,则返回 -1(真),否则返回 0(假)。它通常用于读取文件内容的循环中。

逐行读取文本文件

此示例演示了如何读取文本文件直到到达 EOF。

eof_textfile.bas
Dim fileNum As Integer = FreeFile()
Open "example.txt" For Input As #fileNum

Dim line As String

While Not EOF(fileNum)
    Line Input #fileNum, line
    Print line
Wend

Close #fileNum

这里我们以读取模式打开一个文件,并使用 While 循环,将 EOF 作为条件。循环会一直持续到 EOF 返回真。每次迭代读取文件的一行并打印。

读取二进制数据直到 EOF

在读取未知数据大小的二进制文件时,EOF 也很有用。

eof_binary.bas
Dim fileNum As Integer = FreeFile()
Open "data.bin" For Binary As #fileNum

Dim buffer As Byte

While Not EOF(fileNum)
    Get #fileNum, , buffer
    Print Hex(buffer); " ";
Wend

Close #fileNum

此代码逐字节读取二进制文件,直到 EOF。Get 语句将每个字节读入缓冲区变量。我们打印每个字节的十六进制表示。

结合 EOF 与其他文件函数

EOF 可以与其他文件函数结合使用,以进行更复杂的操作。

eof_combined.bas
Function CountLines(filename As String) As Integer
    Dim fileNum As Integer = FreeFile()
    Open filename For Input As #fileNum
    
    Dim count As Integer = 0
    Dim line As String
    
    While Not EOF(fileNum)
        Line Input #fileNum, line
        count += 1
    Wend
    
    Close #fileNum
    Return count
End Function

Print "Lines: "; CountLines("example.txt")

此函数使用 EOF 控制循环来计算文件中的行数。每次迭代读取一行并递增计数器。当到达 EOF 时,函数返回总行数。

处理空文件

在处理可能为空的文件时,EOF 尤其重要。

eof_empty.bas
Dim fileNum As Integer = FreeFile()
Open "empty.txt" For Input As #fileNum

If EOF(fileNum) Then
    Print "File is empty"
Else
    Print "File contains data"
End If

Close #fileNum

此示例通过在打开文件后立即测试 EOF 来检查文件是否为空。如果 EOF 立即为真,则表示文件不包含任何数据。这可以防止尝试从空文件中读取。

读取定长记录

在读取具有定长记录或结构的文件的时,EOF 有帮助。

eof_records.bas
Type Person
    name As String * 20
    age As Integer
End Type

Dim fileNum As Integer = FreeFile()
Open "people.dat" For Binary As #fileNum

Dim p As Person

While Not EOF(fileNum)
    Get #fileNum, , p
    Print "Name: "; p.name; ", Age: "; p.age
Wend

Close #fileNum

这里我们读取一个包含定长 Person 记录的二进制文件。循环会一直进行直到 EOF,安全地读取每个完整的结构。如果没有 EOF,我们可能会尝试读取部分或不存在的记录。

使用 EOF 进行错误处理

适当的错误处理应伴随 EOF 检查,以实现稳健的文件操作。

eof_error.bas
Dim fileNum As Integer = FreeFile()

If Open("missing.txt" For Input As #fileNum) <> 0 Then
    Print "Error opening file"
    End
End If

While Not EOF(fileNum)
    Dim line As String
    Line Input #fileNum, line
    Print line
Wend

Close #fileNum

此示例显示了使用 EOF 的基本错误处理。在尝试读取之前,我们首先检查文件是否成功打开。如果打开成功,EOF 循环会安全地处理文件内容。

读取 CSV 文件

在处理记录计数不同的 CSV 文件时,EOF 是必不可少的。

eof_csv.bas
Dim fileNum As Integer = FreeFile()
Open "data.csv" For Input As #fileNum

Dim fields() As String
Dim line As String

While Not EOF(fileNum)
    Line Input #fileNum, line
    fields = Split(line, ",")
    
    For i As Integer = LBound(fields) To UBound(fields)
        Print fields(i); " | ";
    Next
    Print
Wend

Close #fileNum

此代码逐行读取 CSV 文件直到 EOF。使用逗号分隔符将每一行拆分为字段。EOF 检查确保我们处理所有记录,而不管文件中存在多少记录。

最佳实践

本教程通过实际示例介绍了 FreeBasic 的 EOF 函数,展示了其在不同文件处理场景中的用法。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十年以上的经验。

列出所有 FreeBasic 教程