学习Excel技术,关注微信公众号:
excelperfect
在《VBA进阶 | 文件操作8:认识Windows Scripting Host》中,我们介绍了FileSystem对象模型。本文将详解其中的File对象与Files集合。
File对象
File对象表示某种类型的磁盘文件,允许访问指定文件的所有属性并移向文件系统的上一级访问文件驻留的系统。创建File对象的进程,例如不用打开文件就可以将File对象的Item属性的引用赋给局部对象变量。
File对象的属性
1.Attributes属性:返回文件的属性,FileAttribute常量。
2.DateCreated属性:返回文件的创建日期,Date类型。
3.DateLastAccessed属性:返回文件最后访问的日期,Date类型。
4.DateLastModified属性:返回文件最后修改的日期,Date类型。
5.Drive属性:返回表示文件所在驱动器的Drive对象,后面带有冒号。
6.Name属性:返回文件名称,String类型。
7.ParentFolder属性:返回文件的父文件夹,即文件所在的文件夹,Folder对象。
8.Path属性:返回文件的完整路径,包括驱动器名或网络路径/共享名,String类型。
9.Size属性:返回以字节表示的文件大小,Variant类型。
10.Type属性:返回包含注册类型描述的字符串,Variant类型。即显示在Windows资源管理器类型列中的文件类型字符串,例如配置设置、应用程序、快捷方式等。如果文件没有扩展名,则类型为“File”;如果文件类型没有注册,则类型显示为扩展名和“File”。
File对象的方法
Copy方法
将指定的文件从某位置复制到另一个位置,其语法为:
oFileObj.CopyDestination[,OverwriteFiles]
其中:
oFileObj代表任何能够返回File对象的对象变量。
参数Destination必需,指定被复制文件的路径和可选的文件名,String类型。
参数OverwriteFiles可选,Boolean类型。如果可以覆盖一个已经存在的文件,则OverwriteFiles的值为True,否则为False。
说明:
在Destination中不能使用通配符。
如果参数Destination将文件路径设置为只读,则无论参数Overwrite的设置如何,Copy方法都将失败。
如果OverwriteFiles为False,而在Destination中又存在该文件,则会产生运行时错误“文件已经存在”。
如果用户有足够的权限,则Destination可以是一个网络路径或共享名。例如:Copy \\NTSERV1\RootTest
Delete方法
删除当前文件,其语法为:
oFileObj.Delete [Force]
其中:
oFileObj代表任何能够返回File对象的对象变量。
参数Force可选,Boolean类型,如果设置为True,则忽略文件的只读标志(如果已设置只读属性的话)并删除该文件。参数Force的默认设置为False。如果参数Force设置为False而文件为只读,则Delete方法将失败。
说明:
如果要删除的文件已打开,则Delete方法将失败并产生一个“Permission Denied”错误。
File对象的Delete方法和FileSystemObject对象的Delete方法不同,后者允许路径参数中有通配符,因而能同时删除多个文件,而前者只能删除oFileObj参数指定的一个文件。
执行Delete方法后,包含oFileObj的Files集合对象会自动更新,被删除的文件从集合中移除且集合的计数减一。不能再次访问已删除的文件,而应该将oFileObj设置为Nothing。
Move方法
将文件从一个文件夹移动到另一个文件夹。其语法为:
oFileObj.Move destination
其中:
oFileObj代表任何能够返回File对象的对象变量。
参数destination必需,String类型,指定要移动的文件所在位置的路径。
说明:
在参数destination中不能使用通配符,但可以是绝对路径也可以是相对路径。
要保证Move方法成功执行,可在调用前使用FileSystemObject对象的FileExits方法和GetAbsolutePath方法。
File对象的Move方法和FileSystemObject对象的MoveFile方法不同,后者允许路径参数中有通配符,因而能够同时移动多个文件,而前者只能移动参数oFileObj指定的一个文件。
执行Move方法后,包含oFileObj的Files集合对象会自动更新,从集合中删除被移动的文件且使集合的计数减一。不能在原来的Folder集合对象中再次访问已移动的文件。
如果用户有足够的权限,则Destination可以是一个网络路径或共享名。例如:oFile.Move \\NTSERV1\d$\RootTwo\myfile.doc
OpenAsTextStream方法
打开被引用的文本文件以进行文件的读或写操作,返回一个TextStream对象。其语法为:
oFileObj.OpenAsTextStream([IOMode[,Format]])
其中:
oFileObj代表任何能够返回File对象的对象变量。
参数IOMode可选,为下表中所列的IOMode常量,指定打开文件的模式,默认设置为ForReading(1)。
参数Format可选,为下表所列的Tristate常量,指定打开文件的格式为ASCⅡ格式或Unicode格式,默认设置为ASCⅡ(False)。
说明:
如果另外一个进程已经打开了该文件,则OpenAsTextStream方法失败并产生错误“权限被否定”。
Files集合
Files集合是任何Folder对象的File属性所返回的File对象的容器(即Folder.Files)。Files集合包含文件夹中的所有文件。使用Files集合的Item属性可以获得对某个File对象的引用,必须使用准确的文件名(包含文件的扩展名)作为参数。可使用For Each … Next语句迭代集合中的所有文件。
Count属性
返回集合中的File对象的数目,Long类型。
Item属性
使用文件名(包括扩展名)作为参数,返回具有该文件名的文件对应的File对象。各个File对象不能通过它们在集合中的序号位置来访问。Item属性是Files集合对象的默认属性。
示例
下面的代码列出H盘中的文件drawcircle.xlsm的信息。
Sub GetFileObject()
Dim ofsFileSys As New FileSystemObject
Dim ofsFiles As Files
Dim ofsFile As File
Set ofsFiles = ofsFileSys.Drives("H").RootFolder.Files
Set ofsFile = ofsFiles.Item("drawcircle.xlsm")
MsgBox "This file's Infomation:" & vbCrLf & _
"File Name:" &ofsFile.Name & vbCrLf & _
"Create Date:" &ofsFile.DateCreated & vbCrLf & _
"Last Modify Date:" &ofsFile.DateLastModified & vbCrLf & _
"Last Access Date:" &ofsFile.DateLastAccessed & vbCrLf & _
"File Size:" &ofsFile.Size & vbCrLf & _
"File Path:" &ofsFile.Path
Set ofsFile = Nothing
Set ofsFiles = Nothing
Set ofsFileSys = Nothing
End Sub
运行代码后,显示如下图1所示的信息框。
图1