第八讲  创建文件应用程序 8.1 File System Object 模型
    Visual Basic 的一个新功能是 File System Object (FSO) 对象模型,该模型提供了一个基于对象的工具来处理文件夹和文件。这使您除了使用传统的 Visual Basic 语句和命令之外,还可以使用您所熟悉的带有一整套属性、方法和事件的 object.method 语法来处理文件夹和文件。 FSO 对象模型使应用程序能够创建、改变、移动和删除文件夹,或者检测是否存在指定的文件夹,如果存在,在哪。FSO 对象模型也能使您获取关于文件夹的信息,诸如名称、创建日期或最近修改日期等等。 FSO 对象模型也使得对文件的处理变得更加简单。在处理文件时,首要目标就是以一种可以有效利用空间和资源、并且易于存取的格式来存储数据。需要能够创建文件、插入和修改数据、以及输出(读)数据。虽然可以将数据存储在诸如 Jet 或 SQL 这样的数据库中,但是这样做将在应用程序中加入相当数量的额外开支。出于多种原因,您不想有这样的额外开支,或者数据存取要求不需要用一个与全功能数据库关联的所有额外功能。在这种情况下,用二进制或文本文件来存储数据是最有效的解决方法。 包含在 Scripting 类型库 (Scrrun.Dll) 中的FSO 对象模型支持通过 TextStream 对象创建和操作文本文件。但是,它还不支持二进制文件的创建和操作。要操作二进制文件,请使用带 Binary 标志的 Open 命令。关于如何操作二进制文件的详细信息,请参阅本章的“使用二进制文件访问”部分。    文件系统对象(File System Object)FSO 对象模型包括这些对象:
对象         描述  Drive        允许收集关于系统所用的驱动器的信息,诸如驱动器有多少可用空间,其共享名称是什么            ,等等。请注意,一个“驱动器”并不一定是一个硬盘。它可以是 CD-ROM 驱动器、一个            RAM 盘等等。而且,驱动器不一定是和系统物理地连接;也可以通过一个 LAN进行逻辑地连            接。  Folder      允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。  Files       允许创建、删除或移动文件,并向系统查询文件的名称、路径等。  FileSystemObject 该组的主要对象,提供一整套用于创建、删除、收集相关信息、以及通常的操作驱动             器、文件夹和文件的方法。与本对象相关联的很多方法复制了其它对象中的方法。  TextStream   允许读和写"文本文件"。  关于 FSO 对象模型中各种属性、方法和事件的信息,可使用 Visual Basic 中的“对象浏览器”(按 F2 键)并查看 Scripting 类型库。
  FileSystemObject 对象                
描述 提供对计算机文件系统的访问。 语法 Scripting.FileSystemObject 说明 下面的代码举例说明了如何使用 FileSystemObject 返回一个 TextStream 对象,该对象是可读并可写的: Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("f:\testfile.txt", True) a.WriteLine("This is a test.") a.Close 在上面列出的代码中,CreateObject 函数返回 FileSystemObject (fs)。CreateTextFile 方法接着创建文件作为一个 TextStream 对象(a),而 WriteLine 方法则向创建的文本文件中写入一行文本。Close 方法刷新缓冲区并关闭文件。  8.2  FSO 对象模型编程  FSO 对象模型编程包括三项主要任务: 
(1)使用CreateObject 方法,或/将一个变量声明为 FileSystemObject 对象类型来创建一个 FileSystemObject 对象(都可) (2)对新创建的对象使用适当的方法。
.访问该对象的属性。  .  FSO 对象模型包含在一个称为 Scripting 的类型库中,此类型库位于 Scrrun.Dll 文件中。如果还没有引用此文件,请从“属性”菜单的“引用”对话框选择“Microsoft Scripting Runtime”项。然后就可以使用“对象浏览器”来查看其对象、集合、属性、方法、事件以及它的常数。 创建 FileSystemObject 对象 第一步是创建一个 FileSystemObject 对象以便进行处理。可以通过如下两种方法完成:  将一个变量声明为 FileSystemObject 对象类型:  Dim fso As New FileSystemObject 使用 CreateObject 方法来创建一个 FileSystemObject 对象:  Set fso = CreateObject("Scripting.FileSystemObject") 在上面的语法中, Scripting 是类型库的名称,而 FileSystemObject 则是想要创建一个实例的对象的名称。 注意 第一种方法只在 Visual Basic 中有效,而第二种方法在 Visual Basic 或 VBScript 中都是可行的。 使用适当的方法 下一步就是使用该 FileSystemObject 对象的适当的方法。例如,如果想要创建一个新对象,既可以使用 CreateFolder 方法也可以使用 CreateTextFile 方法。(FSO 对象模型不支持创建或删除驱动器。) 如果想要删除对象,可以使用 FileSystemObject 对象的 DeleteFile 和 DeleteFolder 方法,或者 File 和 Folder 对象的 Delete 方法。 使用适当的方法,还可以复制、移动文件和文件夹。 请注意, FileSystemObject 对象模型中有一些功能是冗余的。例如,要复制一个文件,既可以使用 FileSystemObject 对象的 CopyFile 方法,也可以使用 File 对象的 Copy 方法。这两者的功能是完全相同的。两者同时存在以提供最大的编程灵活性。 访问已有的驱动器、文件和文件夹 要访问一个已有的驱动器、文件或文件夹,请使用 FileSystemObject 对象中相应的 "get" 方法:  GetDrive  GetFolder
GetFile  例如:
Dim fso As New FileSystemObject, fil As File Set fil = fso.GetFile("c:\test.txt") 但是,请注意,并不需要对新创建的对象使用"get" 方法,因为"create" 函数已经返回了一个句柄到新创建的对象。例如,如果使用 CreateFolder 方法创建了一个新的文件夹,就没有必要使用 GetFolder 方法来访问该对象的诸如名称、路径、大小等属性。只要给 CreateFolder 函数设置一个变量来获取新建文件夹的句柄,然后就可以访问其属性、方法和事件: Private Sub Create_Folder()    Dim fso As New FileSystemObject, fldr As Folder    Set fldr = fso.CreateFolder("C:\MyTest")    MsgBox "Created folder: " & fldr.Name End Sub .访问对象的属性   一旦有了对象的句柄,就能够访问其属性。例如,假定您想要获得一个特定文件夹的名称。首先要创建该对象的一个实例,然后通过适当的方法(在本例中是 GetFolder 方法,因为该文件夹已经存在)得到其句柄: Set fldr = fso.GetFolder("c:\") 现在有了一个 Folder 对象的句柄,可以查看其 Name 属性: Debug.Print "Folder name is: "; fldr.Name 如果想要找出一个文件的最新修改时间,可以使用如下的语法: Dim fso As New FileSystemObject, fil As File Set fil = fso.GetFile("c:\detlog.txt")  ' 获得要查询的 File 对象。 Debug.Print "File last modified: "; fil.DateLastModified ' 显示信息。      8.2.1    使用驱动器和文件夹 可以在程序中使用 FSO 对象模型来处理驱动器和文件夹,如同在“Windows 资源管理器”中能进行的交互方式一样。您可以复制和移动文件夹,获得驱动器和文件夹的信息,等等。
获得驱动器的信息 Drive 对象允许获得一个系统的各个驱动器的信息,这些驱动器可以是物理的,也可以是位于网络上的。通过该对象的属性可以获得下列信息:  以字节表示的驱动器总空间 (TotalSize 属性) 以字节表示的驱动器可用空间 (AvailableSpace 或 FreeSpace 属性)
给驱动器指定的字母号 (DriveLetter 属性)
驱动器类型,诸如可移动的、固定的、网络、CD-ROM、或者 RAM 盘 (DriveType 属性)
驱动器序列号 (SerialNumber 属性)
驱动器使用的文件系统类型,诸如 FAT、 FAT32、 NTFS等等 (FileSystem 属性)
驱动器是否可用 (IsReady 属性)
共享和/或卷标的名称 (ShareName 和 VolumeName 属性)
驱动器的路径或根文件夹 (Path 和 RootFolder 属性)  Drive 对象用法示例 下列示例说明了如何使用 Drive 对象来收集有关驱动器的信息。请记住,在下面的代码中并没有对一个实际 Drive 对象的引用;而是使用 GetDrive 方法来获得一个对已有 Drive 对象(本例中就是 drv)的引用:
Private Sub Command3_Click()    Dim fso As New FileSystemObject, drv As Drive, s As String    Set drv = fso.GetDrive(fso.GetDriveName("c:"))    s = "Drive " & UCase("c:") & " - "    s = s & drv.VolumeName & vbCrLf    s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)    s = s & " Kb" & vbCrLf    s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)    s = s & " Kb" & vbCrLf    MsgBox s End Sub . 使用 CurDir、 ChDrive、 ChDir 或 App.Path ----------------------------------------------      如果使用 CurDir 函数、ChDrive 和ChDir 语句、或者 Path 属性 (App.Path),请注意,它们返回的有可能是一个 UNC 路径(即,形如 \\Server\Share而不是一个驱动器路径(如 E:\Folder),这取决于运行程序或工程的方式。 在如下的情况,App.Path 返回一个 UNC 路径:  UNC (通用命名代码) 文件的一个命名约定,它提供了一种与机器无关的文件定位方法。一个 UNC 名通常包括对一个共享文件夹和网络上可访问的文件名的引用,而不是指定一个驱动器字符和路径。例如,要访问一个名为 Northwind.mdb 的数据库,该数据库在 MyWorkstation 计算机的 Samples 共享子目录中,您可以使用 UNC 名:\\MyWorkstation\Samples\Northwind.mdb。 UNC 命名约定对基于 Web 的应用程序特别有用,因为它们允许引用不必存储在特定 Web 服务器上的数据。 当运行一个从共享网络加载的工程时,即使该网络共享已经被映射到一个驱动器号。 当从一个共享网络运行一个已编译的可执行文件时(但是仅当通过一个 UNC 路径运行该程序)。  ChDrive 不能处理 UNC 路径,因此当 App.Path 返回一个 UNC 路径给 ChDrive 时,就会产生一个错误。要避免这个错误,可以在 ChDrive 语句之前添加 On Error Resume Next,或者测试 App.Path 的头两个字符是否是反斜杠:
On Error Resume Next ChDrive App.Path ChDir App.Path 这个改动将处理所有使用 UNC 路径从 Windows 启动程序(例如,在“启动”菜单的“运行”对话框中)的情况,因为 Windows 将当前的目录设为一个 UNC 路径。ChDir 可以正确地处理 UNC 路径之间的转换。(ChDrive 的失效可以被忽略,因为 UNC 路径当中没有驱动器号) 然而,如果在 MS-DOS 的命令行提示符后键入一个 UNC 路径来运行程序的话,上面的代码不会生效。这是因为命令行提示符用的总是当前目录的驱动器路径,所以 CurDir 被设为一个驱动器路径。ChDir 不会产生错误,但是它不能将一个目录从驱动器路径变为 UNC 路径。在这种情况下,唯一的解决办法是定位一个已经映射为 UNC 路径中指定共享的本地驱动器,或者使用网络命令来创建这样一个映射。 如果工程是从一个网络共享—— UNC 路径或映射的驱动器路径——加载到 Visual Basic 集成开发环境(IDE)中的话,那么当运行工程时 App.Path 将返回一个 UNC 路径,而切ChDrive 失败并产生一个错误。ChDir 虽然不会出错,但目录并未改变。唯一的解决办法是通过手工来设置驱动器和目录: Const PROJECTSHARE = "E:\VBPROJ\MYPROJECT" #Const Debug = True #If Debug Then     ChDrive PROJECTSHARE     ChDir PROJECTSHARE #Else     On Error Resume Next     ChDrive App.Path     ChDir App.Path #End If 如果不止一个人可能在共享网络上打开该工程,那么可以使用一个 DOS 环境变量来允许每个人都拥有自己对该共享的映射: #Const Debug = True #If Debug Then     ChDrive Environ("MYPROJECTDIR")     ChDir Environ("MYPROJECTDIR") #Else     On Error Resume Next     ChDrive App.Path     ChDir App.Path #End If MYPROJECTDIR 的值指定了被映射的驱动器号和路径,例如:  SET MYPROJECTDIR=M:\VBProj\MyProject 使用文件夹 下表显示了普通的文件夹任务以及完成这些任务的方法: 任务 方法  创建一个文件夹 FileSystemObject.CreateFolder   删除一个文件夹 Folder.Delete 或 FileSystemObject.DeleteFolder   移动一个文件夹 Folder.Move 或 FileSystemObject.MoveFolder   复制一个文件夹 Folder.Copy 或 FileSystemObject.CopyFolder   检索文件夹的名称 Folder.Name  查找一个文件夹是否在驱动器上 FileSystemObject.FolderExists   获得已有Folder对象的一个实例 FileSystemObject.GetFolder  找出一个文件夹的父文件夹的名称 FileSystemObject.GetParentFolderName   找出系统文件夹的路径 FileSystemObject.GetSpecialFolder   示例 该示例演示如何使用 Folder 对象和 FileSystemObject 对象来操作文件夹并获得其信息:
Private Sub Command10_Click()    ' 获得 FileSystemObject 的实例。    Dim fso As New FileSystemObject, fldr As Folder, s As String    ' 获取 Drive 对象。    Set fldr = fso.GetFolder("c:")    ' 显示父文件夹名。    Debug.Print "Parent folder name is: " & fldr    ' 显示驱动器名。    Debug.Print "Contained on drive " & fldr.Drive    ' 显示根文件名。    If fldr.IsRootFolder = True Then       Debug.Print "This folder is a root folder."    Else       Debug.Print "This folder isn't a root folder."    End If    ' 用 FileSystemObject 对象创建一个新的文件夹。    fso.CreateFolder ("c:\Bogus")    Debug.Print "Created folder C:\Bogus"    ' 显示文件夹的基本名称。    Debug.Print "Basename = " & fso.GetBaseName("c:\bogus")    ' 删除新建的文件夹。    fso.DeleteFolder ("c:\Bogus")    Debug.Print "Deleted folder C:\Bogus" End Sub              8.2.2  使用文件 ======================= 通过使用新的面向对象的 FSO 对象,诸如 Copy、 Delete、 Move 以及 OpenAsTextStream,或者使用传统的函数,诸如 Open、 Close、 FileCopy、 GetAttr 等等,您可以使用 Visual Basic 中的文件。请注意,不用考虑其文件类型就可以移动、复制或删除文件。
关于传统函数的用法的详细信息,请参阅本章的“用传统的文件 I/O 语句和函数处理文件”部分。本节的余下部分将描述如何使用新的 FSO 对象、方法和属性来使用文件。 文件操作主要有两类:  创建、添加、或删除数据,以及阅读文件 移动、复制、和删除文件  用 File System Objects 创建文件并添加数据 有三种不同方法来创建一个顺序文本文件(有时被称为“文本流”)。一种方法就是使用 CreateTextFile 方法。要创建一个空文本文件,可以:
Dim fso As New FileSystemObject, fil As File Set fil = fso.CreateTextFile("c:\testfile.txt", True) 注意 FSO 对象模型尚不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,请使用带 Random 或 Binary 标志的 Open 命令。关于如何操作随机文件和二进制文件的详细信息,请参阅本章的“使用随机文件访问”和“使用二进制文件访问”部分。 另一种方法是使用 FileSystemObject 对象的 OpenTextFile 方法,该对象的 ForWriting 标志设置为: Dim fso As New FileSystemObject, ts As New TextStream Set ts = fso.OpenTextFile("c:\test.txt", ForWriting) 或者使用带 ForWriting 标志设置的 OpenAsTextStream 方法: Dim fso As New FileSystemObject, fil As File, ts As TextStream Set fso = CreateObject("Scripting.FileSystemObject") fso.CreateTextFile ("test1.txt") Set fil = fso.GetFile("test1.txt") Set ts = fil.OpenAsTextStream(ForWriting) 添加数据到文件 文本文件一经创建,就可以分三步向其中加入数据:  打开文本文件以备写入数据。 写入数据。
关闭文件。  要打开文件,可以使用下面两种方法中的任一种: File 对象的 OpenAsTextStream 方法,或 FileSystemObject 对象的 OpenTextFile 方法。
要向打开的文本文件中写入数据,可以使用 TextStream 对象的 Write 或 WriteLine 方法。它们之间的唯一差别是 WriteLine 在指定的字符串末尾添加换行符。 如果想要向文本文件中添加一个空行,请使用 WriteBlankLines 方法。  要关闭一个已打开的文件,请使用 TextStream 对象的 Close 方法。 下面这个例子示范了如何打开一个文件,使用上述三种写入方法向该文件中添加数据,然后关闭文件: Sub Create_File()     Dim fso, txtfile     Set fso = CreateObject("Scripting.FileSystemObject")     Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)     txtfile.Write ("这是一个测试例子。") ' 写入一行。     ' 写入一行带有换行符的文本。     txtfile.WriteLine("Testing 1, 2, 3.")      ' 向文件中写入三个换行符。     txtfile.WriteBlankLines(3)      txtfile.Close End Sub 使用 File System Objects 读取文件 要从一个文本文件中读取数据,请使用 TextStream 对象的 Read、 ReadLine 或 ReadAll 方法:  任务 方法  从一个文件中读取指定数量的字符 Read  读取一整行(紧跟,但不包括,换行符) ReadLine  读取一个文本文件的所有内容 ReadAll   如果使用 Read 或 ReadLine 方法并且想要跳过数据的某些部分,可以使用 Skip 或 SkipLine 方法。
这些读取方法产生的文本被存储在一个字符串中,而这个字符串可以在一个控件中显示,也可以被字符串操作符分解(诸如 Left、 Right 和 Mid)、合并等等。 注意 vbNewLine 常数包含一个或多个字符(取决于操作系统)使得光标移至下一行的开头(回车/换行)。请注意,有的字符串末尾可能有这样的非打印字符。 示例 Sub Read_Files()     Dim fso As New FileSystemObject, txtfile, _       fil1 As File, ts As TextStream     Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)     MsgBox "正在写入文件"     ' 写入一行。     Set fil1 = fso.GetFile("c:\testfile.txt")     Set ts = fil1.OpenAsTextStream(ForWriting)     ts.Write "Hello World"     ts.Close     ' 读取文件的内容。     Set ts = fil1.OpenAsTextStream(ForReading)     s = ts.ReadLine     MsgBox s     ts.Close End Sub 移动、复制和删除文件 对文件的移动、复制和删除,FSO 对象模型都提供了两种方法: 任务 方法  移动一个文件 File.Move 或 FileSystemObject.MoveFile  复制一个文件 File.Copy 或 FileSystemObject.CopyFile  删除一个文件 File.Delete 或 FileSystemObject.DeleteFile  示例 本例先在C盘的根目录下创建了一个文本文件,并向其中写入一些信息,然后将该文件移至一个名叫 \tmp 的目录,并复制到一个叫 \temp 的目录下,最后删掉该文件在这两个子目录下的拷贝。
要运行本例,请先确认在C盘的根目录下已经存在名叫 \tmp 和 \temp 的目录。 Sub Manip_Files()     Dim fso as New FileSystemObject, txtfile, fil1, fil2     Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)     MsgBox "写入文件"     ' 写入一行。     txtfile.Write ("这是一个测试例子。")     ' 关闭要写入的文件。     txtfile.Close     MsgBox "移动文件到 c:\tmp"     ' 获得C盘根目录下的一个文件句柄。     Set fil1 = fso.GetFile("c:\testfile.txt")     ' 将该文件移至 \tmp 目录下。     fil1.Move ("c:\tmp\testfile.txt")     MsgBox "复制文件到 c:\temp"     ' 将该文件复制到 \temp 目录下。     fil1.Copy ("c:\temp\testfile.txt")     MsgBox "删除文件"     ' 获得这些文件当前位置的句柄。     Set fil1 = fso.GetFile("c:\tmp\testfile.txt")     Set fil2 = fso.GetFile("c:\temp\testfile.txt")     ' 删除这些文件。     fil1.Delete     fil2.Delete MsgBox "全部完成!"    8.2.3    用传统的文件 I/O 语句和函数处理文件 从 Visual Basic 的第一版直到如今,文件处理都是通过使用 Open 语句以及其它一些相关的语句和函数(在下面列出)来实现的。这些机制将逐步被淘汰而转向使用 FSO 对象模型,但是在 Visual Basic 6.0 中仍得到完全支持。
如果设计应用程序使用数据库文件,那么在应用程序中就不需提供直接的文件访问。Data 控件与绑定控件都可以向数据库写数据以及从数据库读数据,这比使用直接的文件访问技术容易得多。 然而,有时常会需要读写文件而不是数据库。这里给出的一组主题展示了如何处理文件,为了直接创建、操纵以及保存文本和其它数据。 文件访问类型 文件本身除了包括一系列定位在磁盘上的相关字节外,再也没有其它东西。当应用程序访问一个文件时,必须假定字节表示什么(字符、数据记录、整数、字符串等等)。 应根据文件包括什么类型的数据,使用合适的文件访问类型。在 Visual Basic 中,有三种文件访问的类型:  顺序型-适用于读写在连续块中的文本文件。 随机型-适用于读写有固定长度记录结构的文本文件或者二进制文件。
二进制型-适用于读写任意有结构的文件。  顺序的访问是为普通的文本文件的使用设计的。文件中每一个字符都被假设为代表一个文本字符或者文本格式序列,比如换行符 (NL)。数据被存储为 ANSI 字符。而为随机型访问打开的文件则认为是由相同长度的记录集合组成。可用用户定义的类型来创建由各种各样的字段组成的记录-每个字段可以有不同的数据类型。数据作为二进制信息存储。
二进制访问允许使用文件来存储所希望的数据。除了没有数据类型或者记录长度的含义以外,它与随机访问很相似。然而,为了能够正确地对它检索必须精确地知道数据是如何写到文件中的。 详细信息   有关文件访问类型的详细信息,请参阅本章中的“使用顺序文件访问”、“使用随机文件访问”和“使用二进制文件访问”。有关文件访问类型的详细信息,请参阅“使用顺序文件访问”、“使用随机文件访问”和“使用二进制文件访问”。 文件访问函数和语句 以下函数用于所有三种类型的文件访问: Dir FileLen LOF  EOF FreeFile Seek  FileCopy GetAttr SetAttr  FileDateTime Loc    下表列出可用于三种直接文件访问类型的各种文件访问的所有语句和函数。
语句与功能 顺序型 随机型 二进制型  Close X X X  Get   X X  Input( ) X   X  Input # X      Line Input # X      Open X X X  Print # X      Put   X X  Type...End Type   X    Write # X        ------使用顺序文件访问说明
推荐您使用 File System Objects 来创建文本文件,但该信息只在需要使用旧文本文件创建方法时才提供。
当要处理只包含文本的文件时,比如由典型文本编辑器所创 建的文件-也就是说,其中的数据没有分成记录的文件,使用顺序型访问最好。顺序型访问不太适于存储很多数字,因为每个数字都要按字符串存储。一个四位数将需要 4 个字节的存储空间,而不是作为一个整数来存储时只需的 2 个字节。 打开顺序访问文件 当以顺序型访问打开一个文件时,可执行以下操作:  从文件输入字符 (Input) 向文件输出字符 (Output)
把字符加到文件 (Append)  要顺序型访问打开一个文件,Open 语句使用以下语法:
Open pathname For [Input | Output | Append] As filenumber [Len = buffersize] 当打开顺序文件作为 Input 时,该文件必须已经存在,否则,会产生一个错误。然而,当打开一个不存在的文件作为 Output 或 Append 时,Open 语句首先创建该文件,然后再打开它。 当在文件与程序之间拷贝数据时,选项 Len 参数指定缓冲区的字符数。 在打开一个文件 Input、Output 或 Append 以后,在为其它类型的操作重新打开它之前必须先使用 Close 语句关闭它。 编辑为顺序访问打开的文件  如果要编辑一个文件,先把它的内容读入到程序变量,然后改变这些变量,最后再把这些变量写回到该文件。以下各节讨论如何编辑以顺序型访问打开的各记录。 从文件中读取字符串  要检索文本文件的内容,应以顺序 Input 方式打开该文件。然后使用 Line Input#,Input( ),或者 Input# 语句将文件拷贝到程序变量中。 Visual Basic 提供了一次读写顺序文件一个字符或一行的语句和功能。 例如,以下代码段逐行读取一个文件: Dim LinesFromFile, NextLine As String Do Until EOF(FileNum)    Line Input #FileNum, NextLine    LinesFromFile = LinesFromFile + NextLine + Chr(13) + Chr(10) Loop 尽管 Line Input # 到达回车换行时它会识别行尾,但是,当它把该行读入变量时,不包括回车换行。如果要保留该回车换行,代码必须添加。 也可以使用 Input # 语句,它读取文件中所写的一列的数字和/或字符串表达式。例如,要从一个邮件列表文件中读取一行,可使用以下语句: Input #FileNum, name, street, city, state, zip 可以使用 Input 函数来从文件向变量拷贝任意数量的字符,所给的变量大小应足够大。例如,以下的代码使用 Input 把指定数目的字符复制到变量。 LinesFromFile = Input(n, FileNum) 要将整个文件复制到变量,请使用 InputB 函数将字节从文件复制到变量。因为InputB 函数返回一个 ANSI 字符串,您必须使用 StrConv 函数将 ANSI 字符串转换为一个如下的 UNICODE 字符串: LinesFromFile = StrConv(InputB(LOF(FileNum), FileNum), vbUnicode) 把字符串写入文件  要在顺序文件中存储变量的内容,应以顺序 Output 或 Append 打开它,然后使用 Print # 语句。例如,文本编辑器可以使用以下代码行来把一个文本框的内容拷贝到文件。 Print #FileNum, TheBox.Text Visual Basic 也支持 Write # 语句,它把一列数字和/或字符串表达式写入文件。它自动地用逗号分开每个表达式,并且在字符串表达式端放置引号。 Dim AnyString As String, AnyNumber As Integer AnyString = "AnyCharacters" AnyNumber = 23445 Write #FileNum AnyString, AnyNumber 这个代码段把两个表达式写入由 FileNum 指定的文件。第一个表达式包含一个字符串而第二个包含数字 23445。因而,Visual Basic 把以下的字符(包括所有标点符号)写入到文件中: "AnyCharacters",23445 注意 如果正在用顺序型访问的 Write # 与 Input # 语句,可考虑换用随机型 或二进制型访问,因为它们更适合面向于记录的数据。 详细信息 有关顺序文件访问的其它信息,请参阅“Open 语句”。
|