VBAFSO对象模型解析.docx
- 文档编号:12108025
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:29
- 大小:36.40KB
VBAFSO对象模型解析.docx
《VBAFSO对象模型解析.docx》由会员分享,可在线阅读,更多相关《VBAFSO对象模型解析.docx(29页珍藏版)》请在冰点文库上搜索。
VBAFSO对象模型解析
VBAFSO对象模型详解
一、简介
文件系统对象FSO的英文全称是FileSystemObject,这种对象模型提出了有别于传统的文件操作语句处理文件和文件夹的方法。
通过采用object.method这种在面向对象编程中广泛使用的语法,将一系列操作文件和文件夹的动作通过调用对象本身的属性直接实现。
FSO对象模型不仅可以象使用传统文件操作语句那样实现文件的创建、改变、移动和删除,而且可以检测是否存在指定的文件夹,如果存在,那么,这个文件夹又位于磁盘上的什么位置。
更令人高兴的是FSO对象模型还可以获取关于文件和文件夹的信息,如名称、创建日期或最近修改日期等以及当前系统中使用的驱动器的信息,如驱动器的种类是CD-ROM还是可移动磁盘,当前磁盘的剩余空间还有多少。
而以前要获取这些信息必须通过调用WindowsAPI函数集中的相应函数才能实现。
FSO对象模型包含在Scripting类型库(Scrrun.Dll)中,它同时包含了Drive、Folder、File、FileSystemObject和TextStream五个对象。
其中Drive用来收集驱动器的信息,如可用磁盘空间或驱动器的类型;Folder用于创建、删除或移动文件夹,同时可以进行向系统查询文件夹的路径等操作;File的基本操作和Folder基本相同,所不同的是Files的操作主要是针对磁盘上的文件进行的;FileSystemObject是FSO对象模型中最主要对象,它提供了一套完整的可用于创建、删除文件和文件夹,收集驱动器、文件夹、文件相关信息的方法。
需要注意的是,FSO对象模型提供的方法是冗余的,也就是说在实际使用中,FSO对象模型中包含的不同对象的不同方法进行的却是同样的操作,而且FileSystemObject对象的方法直接作用于其余对象,所以在后面的文章中并没有单独提到FileSystemObject对象,千万不要以为没有提到就不重要,事实上FileSystemObject对象在整个FSO对象模型中无处不在;最后的TextStream对象则是用来完成对文件的读写操作的。
创建FSO对象模型:
由于FSO对象包含在Scripting类型库(Scrrun.Dll)中,所以在使用前首先需要在在工程中引用这个文件,单击“工程”,“引用”,然后在“引用”对话框中选中“MicrosoftScriptingRuntime”前的复选框,然后单击“确定”。
要创建FSO对象可以采用两种方法,一种是将一个变量声明为FSO对象类型:
DimfsoTestAsNewFileSystemObject;另一种是通过CreateObject方法创建一个FSO对象:
SetfsoTest=CreateObject(“Scripting.FileSystemObject")。
在实际使用中具体采用哪种声明方法,可根据个人的使用习惯而定。
完成了FSO对象模型的创建之后,就可以利用创建的对象模型的方法访问下属各个对象的属性来获取所需信息或进行相关操作了
FileSystemObject对象有许多用来操作文件系统的方法和属性。
下面先看一个例子,如下面的代码:
SubFileInfo()
DimfsAsObject
DimobjFileAsObject
DimstrMsgAsString
Setfs=CreateObject("Scripting.FileSystemObject")
SetobjFile=fs.GetFile("C:
\Windows\System.ini")
strMsg="文件名:
"&objFile.Name&vbCrLf
strMsg=strMsg&"硬盘:
"&objFile.Drive&vbCrLf
strMsg=strMsg&"创建日期:
"&objFile.DateCreated&vbCrLf
strMsg=strMsg&"修改日期:
"&objFile.DateLastModified&vbCrLf
MsgBoxstrMsg,,"文件信息"
EndSub
FileInfo过程首先使用CreateObject函数创建一个FileSystemObject对象,用来访问计算机的文件系统。
然后,使用GetFile方法创建一个File对象并返回对System.ini文件的引用。
接着,利用File对象的Name属性、Drive属性、DateCreated属性、DateLastModified属性返回文件的相应信息。
二、FileSystemObject中的对象的方法和属性
(一)FSO对象
●属性:
1、Drives属性
Drives属性是FileSystemObject对象唯一的属性,返回对硬盘驱动器集合(Drives)的引用,是一个只读属性。
其语法为:
oFileSysObj.Drives
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
Drives属性返回的集合中的每个成员都是Drive对象,表示系统中一个可用的驱动器。
可以使用For…Next循环迭代系统中所有驱动器,或者使用Drives集合的Item方法读取某个Drive对象(代表系统中的某个驱动器)。
例如,下面的代码创建计算机驱动盘清单:
SubDrivesList()
DimfsAsObject
DimcolDrivesAsObject
DimDriveAsObject
DimstrDriveAsString
Setfs=CreateObject("Scripting.FileSystemObject")
SetcolDrives=fs.Drives
ForEachDriveIncolDrives
strDrive="驱动器"&Drive.DriveLetter&":
"
Debug.PrintstrDrive
Next
EndSub
●方法:
1、BuildPath方法
其语法为:
oFileSysObj.BuildPath(Path,Name)
其中,oFileSysObj为任何能够返回FileSystemObject对象的对象变量。
参数Path必需,指定驱动器或文件夹路径,String类型,可以是绝对路径也可以是相对路径,不一定要包含驱动器名。
参数Name必需,指定附加在Path后的文件夹或文件路径,String类型。
参数Path或Name都不一定要求是当前已经存在的路径或文件夹。
BuildPath方法通过合并参数Path和文件夹或文件名生成一个字符串,并且在必要的地方加上正确的主机系统路径分隔符。
该方法不能检验新的文件夹或文件名的有效性。
与人工合并两个字符串相比,使用BuildPath函数的惟一好处就是它能够选择正确的路径分隔符。
2、FileExists方法
FileExists方法用于判断指定的文件是否存在,若存在则返回True。
其语法为:
oFileSysObj.FileExists(FileSpec)
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象。
参数FileSpec必需,代表文件的完整路径,String类型,不能包含有通配符。
如果用户有充分的权限,FileSpec可以是网络路径或共享名,例如:
Ifofs.FileExists("\\TestPath\Test.txt")Then
示例
SubIfFileExists()
DimfsAsObject
DimstrFileAsString
Setfs=CreateObject("Scripting.FileSystemObject")
strFile=InputBox("请输入文件的完整名称:
")
Iffs.FileExists(strFile)Then
MsgBoxstrFile&"已经找到."
Else
MsgBox"该文件不存在."
EndIf
EndSub
3、GetFile方法
GetFile方法用来返回一个File对象。
其语法为:
oFileSysObj.GetFile(FilePath)
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数FilePath必需,指定路径和文件名,String类型。
可以是绝对路径或相对路径。
如果FilePath是一个共享名或网络路径,GetFile确认该驱动器或共享是File对象创建进程的一部分。
如果参数FilePath指定的路径的任何部分不能连接或不存在,就会产生错误。
GetFile方法返回的是File对象,而不是TextStream对象。
File对象不是打开的文件,主要是用来完成如复制或移动文件和询问文件的属性之类的方法。
尽管不能对File对象进行写或读操作,但可以使用File对象的OpenAsTextStream方法获得TextStream对象。
要获得所需的FilePath字符串,首先应该使用GetAbsolutePathName方法。
如果FilePath包含网络驱动器或共享,可以在调用GetFile方法之前用DriveExists方法来检验所需的驱动器是否可用。
因为在FilePath指定的文件不存在时会产生错误,所以应该在调用GetFile之前调用FileExists方法确定文件是否存在。
必须用Set语句将File对象赋给一个局部对象变量。
4、GetFileName方法
GetFileName方法返回给定路径的文件名称部分。
其语法为:
oFileSysObj.GetFileName(Path)
其中,oFileSysObj表示任何能够返回FileSystemObject对象的对象变量。
参数Path必需,指定路径说明,String类型。
如果不能从给定的Path确定文件名,则返回一个零长字符串(”")。
Path可以为绝对路径或相对路径。
GetFileName方法不能检验Path中是否存在指定的文件。
Path可以为网络驱动器或共享。
GetFileName本身不具有智能,它认为字符串中不属于驱动器说明的最后部分就是一个文件名,更像是一个字符串处理函数而不是对象处理方法。
5、GetFileVersion方法
GetFileVersion方法返回文件的版本。
6、CopyFile方法
CopyFile方法用来复制文件,将文件从一个文件夹复制到另一个文件夹。
其语法为:
oFileSysObj.CopyFileSource,Destination[,OverwriteFiles]
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数Source必需,指定要复制的文件的路径和名称,String类型。
参数Destination必需,代表复制文件的目标路径和文件名(可选),String类型。
参数OverwriteFiles可选,表示是否覆盖一个现有文件的标志,True表示覆盖,False表示不覆盖,Boolean类型,默认值为True。
参数source中源路径可以是绝对路径或相对路径,源文件名可包含通配符但源路径不能。
在参数Destination中不能包含通配符。
如果目标路径或文件设置为只读,则无论OverwriteFiles参数的值如何,都将无法完成CopyFile方法。
如果参数OverwriteFiles设置为False且Destination指定的文件已经存在,则会产生一个运行时错误“文件已经存在”。
如果在复制多个文件时出现错误,CopyFile方法将立即停止复制操作,该方法不具有撤销错误前文件复制操作的返回功能。
如果用户有充分的权限,那么source或destination可以是网络路径或共享名,例如:
CopyFile"\\NTSERV1\RootTest\test.txt","C:
\RootOne"
CopyFile方法可以复制一个保存在特定文件夹中的文件。
如果文件夹本身有包含文件的子文件夹,则使用CopyFile方法不能复制这些文件,应该使用CopyFolder方法。
例如:
SubCopyFile()
DimfsAsObject
DimstrFileAsString
DimstrNewFileAsString
strFile="C:
\test.doc"
strNewFile="C:
\ProgramFiles\test.doc"
Setfs=CreateObject("Scripting.FileSystemObject")
fs.CopyFilestrFile,strNewFile
MsgBox"已经创建了指定文件的副本."
Setfs=Nothing
EndSub
7、CreateTextFile方法
CreateTextFile方法创建一个新的文件并返回其TextStream对象,其语法为:
oFileSysObj.CreateTextFileFilename[,Overwrite[,Unicode]]
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数Filename必需,代表任何有效文件名,String类型。
在Filename中不允许使用通配符。
Filename可以是相对路径也可以是绝对路径,如果没有指定路径,则使用应用程序的当前驱动器或文件夹作为路径。
如果指定的路径不存在,则该方法将失败。
参数Overwrite可选,作为一个标志,指定是否覆盖一个具有相同文件名的现有文件,Boolean类型。
默认值为False。
参数Unicode可选,作为一个标志,指明用Unicode格式还是ASCⅡ格式写文件,Boolean类型。
如果设置为True,则以Unicode格式创建文件,否则创建一个ASCⅡ文本文件。
默认值为False。
只有写操作才能使新创建的文本文件自动打开,如果以后希望读取该文件,则必须选关闭它再以读模式重新打开该文件。
如果参数Filename中指定的路径设置为只读,则不论参数Overwrite的值如保,CreateTextFile方法都将失败。
如果用户有充分的权限,那么参数Filename可以是网络路径或共享名,例如:
CreateTextFile"\\NTSERV1\RootTest\myFile.doc"
必须使用Set语句将TextStream对象赋值给局部对象变量。
8、MoveFile方法
MoveFile方法用来移动文件,将文件从一个文件夹移动到另一个文件夹。
其语法为:
oFileSysObj.MoveFilesource,destination
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数source必需,指定要移动的文件的路径,String类型。
参数destination必需,指定文件移动操作中的目标位置的路径,String类型。
如果Source包含通配符或者destination以路径分隔符结尾,则认为destination是一个路径,否则认为destination的最后一部分是文件名。
如果目标文件已经存在,则将出现一个错误。
source可以包含通配符,但只能出现在它的最后一部分中。
destination参数不能包含通配符。
source或destination可以是相对路径或绝对路径,可以是网络路径或共享名。
MoveFile方法在开始操作前先解析source和destination这两个参数。
9、DeleteFile方法
DeleteFile方法删除指定的一个或多个文件。
其语法为:
oFileSysObj.DeleteFileFileSpec[,Force]
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数FileSpec必需,代表要删除的单个文件或多个文件的名称和路径,String类型,可以在路径的最后部分包含通配符,可以为相对路径或绝对路径。
如果在FileSpec中只有文件名,则认为该文件在应用程序的当前驱动器和文件夹中。
参数Force可选,如果将其设置为True,则忽略文件的只读标志并删除该文件,Boolean类型,默认值为False。
如果指定要删除的文件已经打开,该方法将失败并出现一个“PermissionDenied”错误。
如果找不到指定的文件,则该方法失败。
如果在删除多个文件的过程中出现错误,DeleteFile方法将立即停止删除操作,即不能删除余下的文件部分。
该方法不具有撤销产生错误前文件删除操作的返回功能。
如果用户有充分的权限,源路径或目标路径可以是网络路径或共享名。
例如:
DeleteFile“\\NTSERV1\RootTest\MyFile.doc”
DeleteFile方法永久性地删除文件,并不把这些文件移到回收站中。
示例
SubDeleteFile()
DimfsAsFileSystemObject
Setfs=NewFileSystemObject
fs.DeleteFile"C:
\test.doc"
MsgBox"删除了该文件."
EndSub
10、DriveExists方法
DriveExists方法用来判断在本地计算机或者网络上是否存在指定的磁盘,若存在则返回True。
其语法为:
oFileSysObj.DriveExists(DriveSpec)
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数DriveSpec必需,代表路径或驱动器名,String类型。
如果DriveSpec是一个Windows驱动器名,则其后面不需要跟冒号,例如“C”和“C:
”是一样的。
DriveExists方法不能返回可移动驱动器的当前状态,要实现这一目的,必须使用指定驱动器的IsReady属性。
如果用户有充分的权限,DriveSpec可以是网络路径或共享名,例如:
Ifofs.DriveExists("\\NTESERV1\d$")Then
在调用位于某驱动器上一个远程ActiveX服务器中的函数前,最好先使用DriveExists方法检测网络上是否存在该驱动器。
示例
FunctionDriveExists(disk)
DimfsAsObject
DimstrMsgAsString
Setfs=CreateObject("Scripting.FileSystemObject")
Iffs.DriveExists(disk)Then
strMsg="驱动器"&UCase(disk)&"盘已存在."
Else
strMsg=UCase(disk)&"盘未找到."
EndIf
DriveExists=strMsg
EndFunction
11、GetDrive方法
GetDrive方法返回Drive对象,即获得对指定驱动器的Drive对象的引用。
其语法为:
oFileSysObj.GetDrive(drivespecifier)
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数drivespecifier必需,代表驱动器名、共享名或网络路径,String类型。
如果drivespecifier是一个共享名或网络路径,GetDrive确认它是Drive对象创建进程的一部分,否则会产生运行时错误“找不到路径”。
如果指定的驱动器没有连接上或者不存在,则会出现运行时错误“设备不可用”。
如果要从路径中导出drivespecifier字符串,应该首先用GetAbsolutePathName来确保驱动器是路径的一部分,然后在调用GetDriveName从全限定路径中提取出驱动器之前,用FolderExists方法检验路径是否有效,例如:
DimoFileSysAsNewFileSystemObject
DimoDriveAsDrives
Path=oFileSys.GetAbsolutePathName(sPath)
IfoFileSys.FolderExists(sPath)Then
setoDrive=oFileSys.GetDrive(oFileSys.GetDriveName(sPath))
EndIf
如果driverspecifier是一个网络驱动器或共享,在调用GetDrive方法之前,应该用DriveExists方法检验所需的驱动器是否可用。
必须用Set语句将Drive对象赋给局部对象变量。
示例
SubDriveInfo()
Dimfs,disk,infoStr,strDiskName
strDiskName=InputBox("输入驱动器盘符:
","驱动器名称","C:
\") Setfs=CreateObject("Scripting.FileSystemObject")
Setdisk=fs.GetDrive(fs.GetDriveName(strDiskName))
infoStr="驱动器:
"&UCase(strDiskName)&vbCrLf
infoStr=infoStr&"驱动器盘符:
"&UCase(disk.DriveLetter)&vbCrLf
infoStr=infoStr&"驱动器类型:
"&disk.DriveType&vbCrLf
infoStr=infoStr&"驱动文件系统:
"&disk.FileSystem&vbCrLf
infoStr=infoStr&"驱动器系列号:
"&disk.SerialNumber&vbCrLf
infoStr=infoStr&"字节的总大小:
"&FormatNumber(disk.TotalSize/1024,0)&"kb"&vbCrLf
infoStr=infoStr&"驱动器中的自由空间:
"&FormatNumber(disk.FreeSpace/1024,0)&"kb"&vbCrLf
MsgBoxinfoStr,vbInformation,"驱动器信息"
EndSub
12、GetDriveName方法
GetDriveName方法返回一个包含硬盘名称或者网络共享名称的字符串。
即返回给定路径的驱动器名,如果从给定的路径中不能确定驱动器名,则返回一个零长字符串(””)。
其语法为:
oFileSysObj.GetDriveName(Path)
其中,oFileSysObj代表任何能够返回FileSystemObject对象的对象变量。
参数Path必需,指定路径,String类型。
GetDriveName不能检验Pat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VBAFSO 对象 模型 解析
![提示](https://static.bingdoc.com/images/bang_tan.gif)