可以在程序中使用 FSO 对象模型来处理驱动器和文件夹,如同在“Windows 资源管理器”中能进行的交互方式一样。您可以复制和移动文件夹,获得驱动器和文件夹的信息,等等。
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 语句、或者 Path 属性 (App.Path),请注意,它们返回的有可能是一个 UNC 路径(即,形如 \\Server\Share而不是一个驱动器路径(如 E:\Folder),这取决于运行程序或工程的方式。
在如下的情况,App.Path 返回一个 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