ZetCode

FreeBasic Open 关键字

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

FreeBasic 中的 Open 关键字用于文件操作。它允许从磁盘文件读取和向磁盘文件写入。文件处理对于应用程序中持久化数据存储至关重要。

基本定义

在 FreeBasic 中,Open 在程序和文件之间建立连接。它指定文件名、访问模式和文件号。文件号用于在后续操作中引用已打开的文件。

Open 语句必须与 Close 语句配对。文件可以打开以供读取、写入或两者兼有。不同的模式控制文件的访问方式以及在文件不存在时是否创建它。

以读取模式打开文件

此示例展示了如何打开文件以读取文本数据。

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

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

Close #fileNum

在这里,我们打开 "data.txt" 进行输入(读取)。FreeFile() 获取一个可用的文件号。我们逐行读取,直到到达文件末尾 (EOF)。每一行都会打印到控制台。最后,我们关闭文件。

以写入模式打开文件

此示例演示了如何打开文件以写入新内容。

open_write.bas
Dim fileNum As Integer = FreeFile()
Open "output.txt" For Output As #fileNum

Print #fileNum, "First line of text"
Print #fileNum, "Second line of text"

Close #fileNum

我们打开 "output.txt" 进行输出(写入)。如果文件存在,它将被截断。如果文件不存在,它将被创建。我们使用 Print # 写入两行并关闭文件。这对于创建日志很有用。

追加到文件

此示例展示了如何向现有文件追加数据。

open_append.bas
Dim fileNum As Integer = FreeFile()
Open "log.txt" For Append As #fileNum

Print #fileNum, "New log entry: "; Date()
Print #fileNum, "---------------------"

Close #fileNum

使用 For Append 模式可以保留现有内容。新数据将添加到末尾。这对于日志文件或累积数据非常理想。Date() 函数为我们的日志条目添加时间戳。

二进制文件访问

二进制模式允许将原始字节读写到文件中。

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

Dim buffer As String * 10
Get #fileNum, , buffer
Put #fileNum, , "NewData1234"

Close #fileNum

二进制模式用于非文本文件或精确的字节控制。Get 将字节读入缓冲区。Put 将字符串中的字节写入文件。可以指定位置,也可以使其按顺序前进。

随机访问文件

随机访问允许在任何位置读写固定长度的记录。

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

Dim fileNum As Integer = FreeFile()
Open "people.dat" For Random As #fileNum Len = Len(Person)

Dim p As Person
p.name = "John Doe"
p.age = 30
Put #fileNum, 1, p

Get #fileNum, 1, p
Print "Name: "; p.name; ", Age: "; p.age

Close #fileNum

随机访问文件使用固定长度的记录。我们定义一个 Type 结构。Len = Len(Person) 设置记录大小。记录按编号(从 1 开始)访问。这对于数据库类文件非常高效。

打开前检查文件是否存在

在打开文件之前检查文件是否存在是一个好习惯。

open_exists.bas
Dim filename As String = "config.ini"

If Dir(filename) = "" Then
    Print "File not found, creating new one"
    Dim fileNum As Integer = FreeFile()
    Open filename For Output As #fileNum
    Print #fileNum, "[settings]"
    Close #fileNum
Else
    Print "File exists, opening for reading"
    Dim fileNum As Integer = FreeFile()
    Open filename For Input As #fileNum
    ' Read file contents...
    Close #fileNum
End If

Dir() 检查文件是否存在。如果不存在,我们创建它。如果存在,我们打开它进行读取。这可以防止在打开不存在的文件时出错。在文件操作中始终处理这两种情况。

文件锁定以进行多进程访问

文件锁定可防止多个进程访问文件时发生冲突。

open_lock.bas
Dim fileNum As Integer = FreeFile()
Open "shared.txt" For Binary Access Read Write Lock Read Write As #fileNum

' Exclusive access granted
Print #fileNum, "Process 1 was here"
Sleep 2000  ' Simulate work

Close #fileNum

Lock 子句控制访问。Lock Read Write 请求独占访问。其他进程将等待直到文件解锁。这对于共享文件的多进程应用程序至关重要。

最佳实践

本教程介绍了 FreeBasic 的 Open 关键字,并通过实际示例展示了各种场景下的文件操作。

作者

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

列出所有 FreeBasic 教程