在编程中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。在VB6中新提供了一套称为FSO(File System Object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。
一、FSO简介
FSO对象模型包含以下几种对象:
Drive对象:允许收集系统物理或通过LAN与系统逻辑连接的硬盘、CD-ROM等驱动器的可用空间、共享名等信息。
Folder对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。
Files对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。
TextStream对象:允许创建和读写文本文件。
FileSystemObject对象:提供一整套用于驱动器、文件夹和文件操作的方法,在功能上可以把它看作是上面几个对象的集合并且经常与它们配合使用。与该对象相关联的很多方法重复了前面四个对象中的方法,因此我们既可以通过FileSystemObject对象来对驱动器、文件夹和文件进行大多数操作,也可以通过对应的驱动器、文件夹或文件对象对这些组件进行操作。FSO模型通过两种方法实现对同一对象的操作,其操作效果是相同的,提供这种冗余功能的目的是为了实现最大的编程灵活性。
FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Scrrun.dll文件中,可从“工程”选单的“引用”对话框中选择“Microsoft Scripting Runtime”项来引用此文件。
创建一个FileSystemObject对象,可以通过如下两种方法来完成:1将一个变量声明为FileSystemObject对象类型:Dim fso As New FileSystemObject;2使用CreateObject方法来创建:Set fso=CreateObject(″Scripting.FileSystemObject″)。
二、对驱动器的操作
对驱动器的操作主要通过Drive对象并配合FileSystemObject对象,FSO不支持进行创建或删除驱动器的操作,而只允许收集关于系统所用驱动器的信息。通过该对象的属性可以获得下列信息:以字节表示的驱动器可用空间(AvailableSpace或FreeSpace);为驱动器指定的字母号(DriveLetter);驱动器类型(DriveType);驱动器使用的文件系统类型,诸如FAT、FAT32、NTFS等(FileSystem);驱动器是否可用(IsReady);驱动器的路径或根文件夹(Path和RootFolder);驱动器序列号(SerialNumber);共享名或卷标名(ShareName和VolumeName);以字节表示的驱动器总空间(TotalSize)。下面一例说明了如何收集有关驱动器的信息:
Private Sub Command1—Click()
Dim fso As New FileSystemObject, drv As Drive, str As String
Set drv=fso.GetDrive(fso.GetDriveName(″c:″))
Debug.Print ″Total Space: ″ & FormatNumber(drv.TotalSize / 1024, 0) & ″Kb″
Debug.Print ″Free Space: ″ & FormatNumber(drv.FreeSpace / 1024, 0) & ″Kb″
End Sub
三、对文件夹的操作
Folder对象允许通过所提供的方法来复制(Copy)、删除(Delete)或移动(Move)文件夹,并通过其属性向系统查询其名称(Name)、路径(Path)以及创建日期(DateCreated)等。FileSystemObject 对象对文件夹的操作方法有创建(CreateFolder)、复制(CopyFolder)、移动(MoveFolder)和删除(DeleteFolder)。在进行上述操作之前,首先要获得该文件夹的访问句柄(GetFolder)。下例说明了如何对文件夹进行操作:
Private Sub Command2—Click()
Dim fso As New FileSystemObject, fldr As Folder
Set fldr=fso.GetFolder(″c:″)
′获得当前文件夹的访问句柄
Debug.Print ″Parent folder name is: ″ & fldr
′打印文件夹名
Debug.Print ″Contained on drive ″ & fldr.Drive ′打印驱动器名
fso.CreateFolder (″c:/Temp″)
′用FileSystemObject对象创建一个新的文件夹
fso.DeleteFolder (″c:/Temp″)
′删除新建的文件夹
End Sub
访问一个对象,要首先用“Get”方法获得该对象的访问句柄,但如果是用“Create”函数新创建一个对象, 函数会返回一个句柄到新创建的对象,这时只要设置一个变量来获取该句柄即可,不必再用“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方法从一个文本文件中读取数据。
Private Sub Command3—Click()
Dim fso As New FileSystemObject, fil As File, ts As TextStream
fso.CreateTextFile ″c:/testfile.txt″
Set fil=fso.GetFile(″c:/testfile.txt″)
Set ts=fil.OpenAsTextStream(ForWriting)
ts.Write (″这是一个测试文件!″)
ts.Close
Set ts=fil.OpenAsTextStream(ForReading)
s=ts.ReadLine
MsgBox s
ts.Close
End Sub
除了创建与读写文件之外,VB6还可通过FileSystemObject对象对文件进行复制(CopyFile)、移动(MoveFile)与删除(DeleteFile)等操作,在File对象中等效的方法有Copy 、Move和Delete。例程如下 :
Private Sub Command4—Click()
Dim fso As New FileSystemObject, txtfile As TextStream, fil1 As File, fil2 As File
Set txtfile=fso.CreateTextFile(″c:/testfile.txt″, True)
txtfile.Write (″这是一个测试文件!″)
txtfile.Close
Set fil1=fso.GetFile(″c:/testfile.txt″)
′获得一个文件句柄
fil1.Copy (″c:/temp1/testfile.txt″)
′将该文件复制到/temp1目录下
fil1.Move (″c:/temp2/testfile.txt″)
′将该文件移动到/temp2目录下
Set fil1=fso.GetFile(″c:/temp1/testfile.txt″)
′获得这些文件当前位置的句柄
Set fil2=fso.GetFile(″c:/temp2/testfile.txt″)
fil1.Delete
fil2.Delete
End Sub