跳转到内容

Visual Basic/文件

来自维基教科书,开放书籍,开放世界

Visual Basic 的另一个重要部分是文件输入/输出,即处理文件。在编程时,您可能希望在某些时候保存数据,以便以后访问。这就是文件 I/O 的用处。VB 允许我们执行 Windows 资源管理器和 DOS 命令行中提供的大多数操作。在您开始之前,您需要了解文件 I/O 的工作原理。

数据布局

[编辑 | 编辑源代码]

VB 通常将数据排列成记录和字段,以方便程序员使用。最好的解释方法是通过举例说明

 Bob,Larry,George
 Kevin,Ken,Alec

这显然是包含姓名的数据。每行数据称为一条记录。因此,第一条记录包含 Bob、Larry 和 George。一个字段是记录中的每一项。因此,第一条记录中的第一个字段是 Bob,第二个字段是 Larry,依此类推。您可以根据需要设置任意数量的字段和记录。
记录和字段实际上只是为了方便程序员而创建的。为了获得更大的灵活性,您也可以将整个内容视为一个字符串。您可以使用内置的 Split() 函数将字符串拆分为记录和字段。

当程序从外部来源接收数据时,它被认为是输入。在 Visual Basic 中,此来源通常是标准文本文件,具有 .txt 文件扩展名(可以使用记事本读取)。首先,您需要打开要从中读取数据的文件。这是使用以下代码完成的

 Open <filename> For <mode> As <channelnumber>

例如

 Open "c:\filename.txt" For Input As #1

文件路径可以是您想要的任何内容,如果不存在,将创建新的文件(和目录)。文件的扩展名并不重要。它不会影响文件的内容或写入/读取文件的过程。所以你也可以这样做

 Open "c:\filename.myfile" For Input As #1

或者这样

 Open "c:\filename" For Input As #1

打开和文件路径是不言自明的。但是,“用于输入”表示它被用来从外部文件接收数据,VB 将数据从文件“输入”到变量中。在输出(写入文件)时,这将更改为“用于输出”。当我们想以二进制方式打开文件时,它是“用于二进制”。“作为 #1”是指正在使用的通道。当您要从文件中查找特定信息时,您将使用“用于随机”。通道可以被视为 Visual Basic 为文件设置的路径。一个通道一次只能使用一个文件。因此,如果您想打开多个文件而不关闭任何文件,您可以使用不同的通道。要输入一行数据,它非常简单

 Input <channel>, <variables>

例如

 Input #1, x, y, z

这将从通道 1 连接到的任何内容中读取数据。它将把当前记录的第一个字段存储到 X 中,第二个字段存储到 Y 中,第三个字段存储到 Z 中。
最后,我们应该始终在完成工作后关闭文件。语法很简单

 Close <channel>

举个例子

 Close #1


有关使用输入的更多信息将在“数据使用”部分介绍。


注意:如果代码将成为更大程序的一部分,应以动态方式而不是硬编码的方式获取通道号。这是使用函数 FreeFile() 完成的

  Dim nLogFile As Long
  nLogFile = FreeFile()
  Open "c:\filename" For Input As #nLogFile
  ...
  Close #nLogFile

输出与输入非常相似。唯一的区别是,它将信息发送出程序并进入文件。再次,我们只使用文本文件 (.txt)。首先,您必须打开文件

 Open "C:\filepath.txt" For Output As #1

您可能已经注意到,与打开用于输入的文件唯一的区别是“用于输出”。完成此操作后,其他所有操作都非常简单。

 Write #1, x, 5

假设 X = 3,如果您打开文本文档,它将如下所示

 3, 5

您可以将任何值或变量写入文件,但需要注意的是,在写入字符串时,应将其放在引号中。如果它是包含字符串的变量,则会自动执行此操作。另一个重要提示是,两个连续的写入语句将写入不同的行。例如

 Write #1, 5, 4
 Write #1, 7, 4
 Write #1, "this is a string"

将出现在文件中,如下所示

 5, 4
 7, 4
 "this is a string"

请记住,在输出到文件时,它将擦除文本中所有先前的信息。要添加到现有信息中,必须使用“追加”命令。

如果您将数据写入文件供其他程序使用,您可能会发现您不希望 VB 将引号放在您的字符串周围。您可以通过使用 Print 命令而不是 Write 命令来避免写入引号。例如

 Print #1, "this is a string"

将出现在文件中,如下所示

 this is a string

如果在运行时,正在处理的文件被修改,并且添加了一行包含必要数据的新行,并且 open 语句以“#1”结束,那么文件中第 1 行中的任何内容都将被覆盖(只有在文件以 Output 方式打开时)。为了解决这个问题,一个变量被声明为 FreeFile(Dim FF as FreeFile)。这将打开正在处理文件中的第一个空闲插槽或行。新的 Open 语句将变为

 Open "C:\filepath.txt" For Output As FF

(将擦除文件)

 Open "C:\filepath.txt" For Append As FF

(将不会擦除文件)
使用第二个语句,将写入文件中的第一个空闲行。

如何指定文件路径

[编辑 | 编辑源代码]

在实践中,open 语句很少像这样

 Open "C:\filepath.txt" For Append As FF

通常,文件路径将存储在字符串变量中

 Dim s As String
 s = "C:\filepath.txt" 
 Open s For Append As FF

变量s只需要保存文件的路径。路径可以是绝对路径,例如

 s = "d:\users\me\my file.txt"

或当前目录中的文件(使用CurDir找出它是哪个)

 s = "my file.txt"

或相对于当前目录的路径,例如

 s = "..\you\your file.txt"

或像这样

 s = "mysub\myother file.txt"

对于更具冒险精神的人来说,它还可以包括对服务器上共享文件的引用,该服务器不使用驱动器号

 s = "\\someserver\someshare\somefile.txt"


可以在此处找到使用文件读取的示例窗体。在 Internet Explorer 中右键单击“此处”,然后选择“将目标另存为...”来保存窗体文件。

请上传更多包含示例的文件。这对开发人员来说将非常有帮助。


上一页:数组 目录 下一页:数据类型
华夏公益教科书