文件系统对象
Visual Basic 的一个新功能是 File System Object (FSO) 对象模型,该模型提供了一个基于对象的工具来处理文件夹和文件。这使您除了使用传统的 Visual Basic 语句和命令之外,还可以使用您所熟悉的带有一整套属性、方法和事件的 object.method 语法来处理文件夹和文件。
FSO 对象模型使应用程序能够创建、改变、移动和删除文件夹,或者检测是否存在指定的文件夹,及文件夹的位置。FSO 对象模型也能使您获取关于文件夹的信息,诸如名称、创建日期或最近修改日期等等。
FSO 对象模型也使得对文件的处理变得更加简单。在处理文件时,首要目标就是以一种可以有效利用空间和资源、并且易于存取的格式来存储数据。需要能够创建文件、插入和修改数据、以及输出(读)数据。虽然可以将数据存储在诸如 Jet 或 SQL 这样的数据库中,但是这样做将在应用程序中加入相当数量的额外开支。出于多种原因,您不想有这样的额外开支,或者数据存取要求不需要用一个与全功能数据库关联的所有额外功能。在这种情况下,用二进制或文本文件来存储数据是最有效的解决方法。
包含在 Scripting 类型库 (Scrrun.Dll) 中的FSO 对象模型支持通过 TextStream 对象创建和操作文本文件。但是,它还不支持二进制文件的创建和操作。要操作二进制文件,请使用带 Binary 标志的 Open 命令。
一、FSO简介
在编程中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。在VB6中新提供了一套称为FSO(File System Object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。 FSO对象模型包含以下几种对象:
(1) Drive对象:允许收集关于系统所用的驱动器的信息,诸如驱动器有多少可用空间,其共享名称是什么,等等。请注意,一个“驱动器”并不一定是一个硬盘。它可以是 CD-ROM 驱动器、一个RAM 盘等等。而且,驱动器不一定是和系统物理地连接;也可以通过一个 LAN进行逻辑地连接。
(2) Folder对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。
(3) Files对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。
(4) TextStream对象:用来创建和读写文本文件。
(5) FileSystemObject对象:该组的主要对象,提供一整套用于创建、删除、收集相关信息、以及通常的操作驱动器、文件夹和文件的方法。与本对象相关联的很多方法复制了其它对象中的方法。
FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Scrrun.dll文件中,可从“工程”选单的“引用”对话框中选择“Microsoft Scripting Runtime”项来引用此文件,如图10-5所示。
创建一个FileSystemObject对象,可以通过如下两种方法来完成:
(1) 将一个变量声明为FileSystemObject对象类型:Dim fso As New FileSystemObject;
(2) 使用CreateObject方法来创建:Set fso=CreateObject(“Scripting.FileSystemObject”)。
二、对驱动器的操作
对驱动器的操作主要通过Drive对象并配合FileSystemObject对象,FSO不支持进行创建或删除驱动器的操作,而只处理收集关于系统所用驱动器的信息。通过该对象的属性可以获得下列信息:
(1) 以字节表示的驱动器可用空间(AvailableSpace或FreeSpace);
(2) 为驱动器指定的字母号(DriveLetter);驱动器类型(DriveType);
(3) 驱动器使用的文件系统类型,诸如FAT、FAT32、NTFS等(FileSystem);
(4) 驱动器是否可用(IsReady);
(5) 驱动器的路径或根文件夹(Path和RootFolder);
(6) 驱动器序列号(SerialNumber);共享名或卷标名(ShareName和VolumeName);
(7) 以字节表示的驱动器总空间(TotalSize)。
例10-6中按钮GetFreeSpace的操作演示了如何获取C盘磁盘空间信息,格式化后显示在文本框txShow中,代码及说明如下:
Private Sub GetFreeSpace_Click()
Dim fso As New FileSystemObject
Dim drv As Drive, str As String
Set drv = fso.GetDrive(fso.GetDriveName("c:")) '获取Dirve对象
txShow.Text = "C盘实际大小:" + FormatNumber(drv.TotalSize / 1024, 0) + "Kb" + Chr(13) + Chr(10)
txShow.Text = txShow.Text + "剩余空间:" + FormatNumber(drv.FreeSpace / 1024, 0) & "Kb"
End Sub
三、对文件夹的操作
Folder对象答应通过所提供的方法来复制(Copy)、删除(Delete)或移动(Move)文件夹,并通过其属性向系统查询其名称(Name)、路径(Path)以及创建日期(DateCreated)等。FileSystemObject 对象对文件夹的操作方法有创建(CreateFolder)、复制(CopyFolder)、移动(MoveFolder)和删除(DeleteFolder)。在进行上述操作之前,首先要获得该文件夹的访问句柄(GetFolder)。
例10-6中按钮OperateFloder的操作演示了如何获取一个文件夹的基本信息,并且格式化后显示在文本框txShow中;如何创建一个文件夹及删除,详细代码及说明如下:
Private Sub OperateFloder_Click()
Dim fso As New FileSystemObject, fldr As Folder
'获得当前文件夹的访问句柄
Set fldr = fso.GetFolder("c:\windows\system")
'显示父文件夹
txShow.Text = "c:\windows\system的父文件夹:" + fldr.ParentFolder
'显示驱动器名
txShow.Text = txShow.Text + Chr(13) + Chr(10) + "驱动器名称:" + fldr.Drive
'用FileSystemObject对象创建一个新的文件夹
fso.CreateFolder ("c:\Temp")
'删除新建的文件夹
fso.DeleteFolder ("c:\Temp")
End Sub
函数新创建一个对象, 函数会返回一个句柄到新创建的对象,这时只要设置一个变量来获取该句柄即可,不必再用“Get”方法。如:Set fldr=fso.CreateFolder(″C:\Temp2″)。
四、对文件的读写操作
读写文件,在VB6之前都是使用Open等语句来实现,FSO支持通过TextStream对象来创建和读写文本文件。
FSO通过CreateTextFile、OpenTextFile、OpenAsTextStream 三种方法来创建一个顺序文本文件。文件创建后,就可分三步写入数据:
(1) 利用FileSystemObject对象的OpenTextFile方法或File对象的OpenAsTextStream 方法打开文本文件以备写入数据。
(2) 使用TextStream 对象的Write、WriteLine或WriteBlankLines方法写入数据。
(3) 使用TextStream对象的Close方法关闭文件。
我们可使用TextStream 对象的Read、ReadLine或ReadAll方法从一个文本文件中读取数据。例10-6中按钮WirteFile的单击事件实现了在C盘的根目录下创建了一个文本文件,分别使用Write、WriteLine、WriteBlankLines向其中写入信息。详细代码及说明如下:
Private Sub WirteFile_Click()
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
例10-6中按钮ReadFile的单击事件实现了打开c:\testfile.txt,读取其中的信息并显示在文本框中。详细代码及说明如下:
Private Sub ReadFile_Click()
Dim fso As New FileSystemObject, fil1 As File
Set fil1 = fso.GetFile("c:\testfile.txt")
' 读取文件的内容。
Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
ts.Close
txShow.Text = s
End Sub
五、移动、复制和删除文件
除了创建与读写文件之外,VB6还可通过FileSystemObject对象对文件进行复制(CopyFile)、移动(MoveFile)与删除(DeleteFile)等操作,在File对象中等效的方法有Copy 、Move和Delete,如表10-2。
任务 |
方法 |
移动一个文件 |
File.Move 或FileSystemObject.MoveFile |
复制一个文件 |
File.Copy 或FileSystemObject.CopyFile |
删除一个文件 |
File.Delete 或FileSystemObject.DeleteFile |
表10-2 File对象操作表
例10-6中按钮OperateFile的单击事件实现了在C盘的根目录下创建了一个文本文件,并向其中写入一些信息,然后将该文件移至一个名叫 \tmp 的目录,并复制到一个叫 \temp 的目录下,最后删掉该文件在这两个子目录下的拷贝。详细代码及说明如下:
Private Sub OperateFile_Click()
Dim fso As New FileSystemObject, txtfile, fil1, fil2
'如果不存在,先创建c:\temp和c:\temp文件夹,
If Not fso.FolderExists("c:\tmp") Then
fso.CreateFolder ("c:\tmp")
End If
If Not fso.FolderExists("c:\temp") Then
fso.CreateFolder ("c:\temp")
End If
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 "全部完成!"
End Sub