当前位置 博文首页 > VBS基础篇 - FileSystemObject对象详解
下面是转摘的关于FileSystemObject的详细介绍,TextStream是其中的一个子对象。
前言
最近一直在学VBScript,网上相关的教程也有很多,但大多数的对象都放在ASP中讲解,对于没有学过ASP的同学来说就非常郁闷了。所以打算把在学习FileSystemObject及TextStream中所常用的属性和方法写出来供大家来学习,如有不妥的地方请予以指出。
备注:所有的脚本均在QTP 9.0中测试过。
FileSystemObject对象概述
FileSystemObject 对象的作用:提供对计算机文件系统的访问,它允许我们在代码内操作文本文件、文件夹及驱动器。FileSystemObject 对象提供一个属性和一系列方法,可用它们来操纵 FileSystemObject 对象实现的一些从属对象。这里提供了全部的内容概要,然后介绍每一个从属对象。
一、FileSystemObject 对象的属性
FileSystemObject 对象只有一个属性,它用于得到当前机器上的所有有效驱动器的列表,如表1所示:
表1 FileSystemObject 对象的属性和说明 |
|
属性 |
说明 |
Drivers |
返回本地计算机可用的驱动器列表 |
‘如下脚本就可以获得FileSystemObject的Drivers属性 Set objFSO = CreateObject ("Scripting.FileSystemObject") Set colDrivers = objFSO.Drivers
正如已经看到的,FileSystemObject 对象包含一个属性——Drives,它返回一个包括本地计算机上所有可用驱动器的集合。
Drives 集合里的每个条目是一个 Drive 对象。Drive 对象的属性如表2所示:
表2 Drive 对象的属性及说明 |
|
方法 |
说明 |
AvailableSpave |
考虑了帐户定额和/或其他限制,返回驱动器上对于该用户可用的空间的大小 |
DriveLetter |
返回驱动器的字母 |
DriveType |
返回驱动器的类型。返回值可以是 Unknown(0)、Removeable(1)、Fixed(2)、Network(3)、CDRom(4) 和 RamDisk(5)。然而需要注意的是当前版本的 scrrun.dll 不支持预定义常数 Network,必须使用十进制 3 来代替 |
FileSystem |
返回驱动器文件系统的类型。返回值包括“FAT”、“NTFS”和“CDFS” |
FreeSpace |
返回驱动器上可用剩余空间的总量 |
IsReady |
返回一个布尔值表明驱动器是否已准备好 |
Path |
返回一个由驱动器字母和冒号组成的驱动器路径,即“C:” |
RootFolder |
返回代表的驱动器根目录文件夹的 Folder 对象 |
SerialNumber |
返回一个用于识别磁盘卷的十进制的序列号 |
ShareName |
如果是一个网络驱动器,返回该驱动器的网络共享名 |
TotalSize |
返回驱动器的总容量(以字节为单位) |
VolumeName |
设定或返回本地驱动器卷名 |
因此,通过使用 Drives 集合里的 Drive 对象,可以在服务器上产生一个驱动器列表,与通过检查每个可能的驱动器字母来判别驱动器是否存在的方法相比,效率更高。我们也可以得到关于该驱动器的信息。
示例:
' 创建FileSystemObject对象 Set objFSO = CreateObject("Scripting.FileSystemObject") ' 创建Drives集合,并赋值给colDrives Set colDrives = objFSO.Drives ' 遍历Drives集合 For Each objDrive in colDrives '判断驱动器是否已准备好 If objDrive.IsReady Then msg = "驱动器的名称为:" & objDrive.DriveLetter & " " msg =msg & "驱动器文件系统的类型:" & objDrive.FileSystem &" " msg = msg & "驱动器的总容量:" & int(objDrive.TotalSize/(1024*1024*1024)) & "G " msg = msg & "剩余空间的总量:" & int(objDrive.FreeSpace/(1024*1024*1024)) & "G " End If Next reporter.ReportEvent micDone ,"遍历Drives集合",msg
备注:在系统上运行这段程序以前有一点要注意。如果在 A 驱动器里没有磁盘,或 CD-ROM 驱动器里没有光盘,将得到一个错误提示:“Disk Not Ready”。除了 DriveLetter 属性和 DriveType 属性外,在使用其他属性和方法前,通过检查每个驱动器的 IsReady 属性,可以保护该页面。
二、FileSystemObject 对象的方法
1. 与驱动器有关的方法
表3 与驱动器有关的方法及说明 |
|
方法 |
说明 |
DriveExists(drivespec) |
如果在 drivespec 中指定的驱动器存在,则返回 True,否则返回 False。drivespec 参数可以是一个驱动器字母,或者是文件、文件夹的完整绝对路径 |
GetDrive(drivespec) |
返回 drivespec 指定的驱动器所对应的Drive对象。drivespec 可以包含冒号、路径分隔符或者是网络共享名,即:“C”、“C:”、“C:”及“/machinesharename” |
GetDriveName(drivespec) |
用字符串返回 drivespec 指定的驱动器的名称。drivespec 参数必须是文件或文件夹的绝对路径,或者仅仅是驱动器字母,例如:“c:”或“c” |
DriveExists的使用
方法名:DriveExists(drivespec)
说明:如果在 drivespec 中指定的驱动器存在,则返回 True,否则返回 False。drivespec 参数可以是一个驱动器字母,或者是文件、文件夹的完整绝对路径
示例:
' 创建FileSystemObject对象 Set objFSO = CreateObject ("Scripting.FileSystemObject") For intCode = 65 To 90 'ANSI codes for 'A' to 'Z' strLetter = Chr(intCode) 'Chr:返回与指定的 ANSI 字符代码相对应的字符。 If objFSO.DriveExists(strLetter) Then '判断相应的盘符是否存在,如存在输出 Reporter.ReportEvent micDone,"Show Drive”,” Found drive " & strLetter End If Next
另外,如果已知要访问的驱动器、文件夹或文件。可以直接对其使用 GetDrive、GetFolder、GetSpecialFolder 和 GetFile 方法。
2. 与文件夹有关的方法及属性
用FileSystemObject对象来操作文件夹的方法:
表4 与文件夹有关的方法及说明 |
|
方法 |
说明 |
BuildPath(path,name) |
在已有的路径 path 上增添名字为 name 的文件或文件夹,如果需要,则增添路径分隔符' ' |
CopyFolder(source,destination,overwrite) |
从指定的源文件夹 source(可以包含通配符)中复制一个或多个文件夹到指定的目标文件夹 destination,包含了源文件夹中的所有文件。如果 source 包含通配符或 destination 末尾是路径分隔符(‘'),那么认为 destination 是要放置源文件夹的拷贝的文件夹。否则的话,认为 destination 是要创建的新文件夹的路径名。如果 destination 文件夹已经存在且 overwrite 参数设置为 False,将产生错误,缺省的 overwrite 参数是True |
CreateFolder(foldername) |
创建一个路径名为 foldername 的文件夹。如果 foldername 已经存在将产生错误 |
DeleteFolder(folderspec,force) |
删除由 folderspec 指定的一个或多个文件夹(可以在路径的最后部分包含通过配符)及文件夹中的所有内容。如果可选的 force 参数设置为 true,那么即使文件夹包含的文件具有只读属性,也将删除该文件夹。缺省的 force 参数是 False |
FolderExists(folderspec) |
如果 folderspec 指定的文件夹存在则返回 True,否则返回 False。folderspec 参数可以包含文件夹的绝对或相对路径,或者仅仅是当前文件夹中看到的文件夹名 |
GetAbsolutePathName(pathspec) |
返回明确指定文件夹的路径,其中要考虑到当前文件夹的路径。例如,如果当前文件夹是“c:docssales”,而pathspec是“jan”,返回的字符是“c:docssalesjan”。通配符、”..”和”/”路径操作符都是可以接受的 |
GetFolder(folderspec) |
返回 folderspec 指定的文件夹对应的 Folder 对象。folderspec 可以是文件夹的相对的或绝对的路径 |
GetParentFolderName(pathspec) |
返回pathspec 文件或文件夹的上一级文件夹。不检验该文件夹是否存在 |
GetSpecialfolder(folderspec) |
返回一个特定的 Windows 文件夹相对应的 Folder 对象。参数 folderspec 的允许值是WindowsFolder(0)、SystemFolder(1) 和 TemporaryFolder(2) |
MoveFolder(source,destination) |
将 source 指定的一个或多个文件夹移动到 destination 指定的文件夹。在 source 里可以包含通配符,但在 destination 中不行。如果 source 包含通配符或 destination 末尾是路径分隔符(‘'),则认为 destination 是要放置源文件夹的文件夹,否则认为它是一个新文件夹的完整路径和名字。如果目的文件夹 destination 已经存在则产生错误 |
CopyFolder的使用
方法名:CopyFolder(source,destination,overwrite)
说明:将文件夹从某位置递归复制到另一位置。详细说明请查看表4。
示例:
' 创建FileSystemObject对象 Set objfso = createobject("scripting.FileSystemObject") ' 将D:/test下所有的内容复制到c:/123 objfso.CopyFolder "D:/test","c:/123"
注:如果c:/123不存在,则QTP将自动创建它
CreateFolder及DeleteFolder的使用
方法名:CreateFolder(foldername)/DeleteFolder(folderspec,force)
说明:创建/删除一个路径名为 foldername 的文件夹。详细说明请查看表4。
示例:
' 创建FileSystemObject对象 Set objfso = createobject("scripting.FileSystemObject") ‘ 在c:/创建new folder文件夹,如果文件夹存在,则会出现错误提示 objfso.CreateFolder("c:/new folder") ‘ 删除c:/new folder文件夹 objfso.DeleteFolder("c:/new folder")
注:DeleteFolder无论文件夹是否包含内容,都将删除该文件夹
FolderExists的使用
方法名:FolderExist(folderspec)
说明:如果指定的文件夹存在,则返回 True;否则返回 False。详细说明请查看表4。
示例:
Function hanshu(strpath) Dim objfso,objset ‘ 创建FileSystemObjec对象 Set objfso = CreateObject("Scripting.FileSystemObject") ‘ 判断在指定的路径中是否有 If Not objfso.FolderExists(strpath) Then objset = objfso.CreateFolder(strpath) else objset = objfso.DeleteFolder(strpath) End If hanshu = objset End Function hanshu("c:/new folder")
GetAbsolutePathName的使用
方法名:GetAbsolutePathName(pathspec)
说明:从提供的指定路径中返回完整且含义明确的路径。详细说明请查看表4。
示例:
Dim objfso ‘创建FileSystemObject对象 Set objfso = createobject("Scripting.FileSystemObject") ‘返回当前的目录,下面两条语句返回一样的结果 msgbox (objfso.GetAbsolutePathName("")) msgbox (objfso.GetAbsolutePathName("C:"))
GetFolder的使用
方法名:GetFolder(folderspec)
说明:返回与指定的路径中某文件夹相应的 Folder 对象。可以根据所返回的Folder 对象,再去访问该Folder 对象所持有的属性。
示例:
Dim objfso,objset '创建FileSystemObject对象 Set objfso = createobject("Scripting.FileSystemObject") '返回C:/testing的Folder的对象 Set objset = objfso.GetFolder("C:/testing") ' 根据所返回的Folder对象,去访问其相关的属性 reporter.ReportEvent micDone ,"Folder对象的相关属性","文件夹创建的日期:" & objset.DateCreated &"; 文件夹所在的驱动:" & objset.Drive & "; 文件夹的名字:" & objset.Name
注:关于Folder对象的属性,将在下面会详细介绍
GetParentFolderName的使用
方法名:GetParentFolderName(pathspec)
说明:返回字符串,该字符串包含指定的路径中最后一个文件或文件夹的父文件夹。
示例:
Dim objfso '创建FileSystemObject对象 Set objfso = createobject("Scripting.filesystemobject") '使用GetParentFolderName方法来返回上一层文件夹 msgbox (objfso.GetParentFolderName("C:/WINDOWS/addins"))
GetSpecialFolder的使用
方法名:GetSpecialFolder(folderspec)
说明:返回指定的特殊文件夹。详细说明请查看表4。
示例:
Dim fso,tempName Set fso = CreateObject("Scripting.FileSystemObject") 'GetSpecialFolder()中的参数2,返回一个名为Temp的临时文件夹 Set tempName = fso.GetSpecialFolder(2) msgbox tempName
MoveFolder的使用
方法名:MoveFolder(source,destination)
说明:将一个或多个文件夹从某位置移动到另一位置。详细说明请查看表4。
示例:
Dim sourcepath,destination sourcepath = "C:/testing" destination = "C:/123" '调用MoveFolders方法 call MoveFolders(sourcepath,destination) Sub MoveFolders(sourcepath,destination) Dim fso '创建FileSystemObject对象 Set fso = CreateObject("Scripting.FileSystemObject") '使用MoveFolder方法,将testing文件夹的内容移动到123文件夹下 fso.MoveFolder sourcepath,destination End Sub
注:如果脚本在运行前文件夹123已存在,则运行是会发生错误;在不同的磁盘下MoveFolder方法不能用
上面提到的Folder方法是基于FileSystemObject 对象的,现在我们来看看基于Folder对象的方法。
Folder对象所提供的方法
Folder 对象提供一组可用于复制、删除和移动当前文件夹的方法。这些方法的运行方式与 FileSystemObject 对象的CopyFolder、DeleFolder 和 MoveFolder 方法相同,但这些方法不要求 source 参数,因为源文件就是这个文件夹。
备注:CopyFolder、DeleFolder等方法是基于FileSystemObject 对象的;而下面的Copy、Delete等方法是基于FileSystemObject对象下的Folder对象,他们实现的功能是类似的。
表5 Folder 对象的方法及说明 |
|
方法 |
说明 |
Copy(destination,overwrite) |
将这个文件夹及所有的内容复制到 destination 指定的文件夹。如果 destination 的末尾是路径分隔符(‘'),那么认为 destination 是放置拷贝文件夹的一个文件夹。否则认为 destination 是要创建的新文件夹的路径和名字。如果目标文件夹已经存在且 overwrite 参数设置为 False,将产生错误,缺省的 overwrite 参数是 True |
Delete(force) |
删除文件夹及里面的所有内容。如果可选的 force 参数设置为 True,即使文件夹设置为只读或含有只读的文件,也将删除该文件夹。缺省的 force 是 False |
Move(destination) |
将文件夹及里面所有的内容移动到 destination 指定的文件夹。如果 destination 的末尾是路径分隔符(‘'),那么认为 destination 是放置移动文件夹的一个文件夹。否则认为 destination 是一个新的文件夹的路径和名字。如果目标文件夹已经存在,则出错 |
CreateTextFile(filename,overwrite,unicode) |
用指定的文件名在文件夹内创建一个新的文件,并且返回一个相应的TextStream 对象。如果可选的 overwrite参数设置为True,将覆盖任何已有的同名文件。缺省的overwrite 参数是 False。如果可选的 unicode 参数设置为 True,文件的内容将存储为 unicode 文本。缺省的 unicode 是 False |
Copy的使用
方法名:Copy(destination,overwrite)
说明:将文件夹的所有内容,复制到destination文件夹中。详细说明请见表5
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法来返回Folder对象 Set objset = fso.getFolder(sourcepath) '将testing中的所有内容复制到123文件夹中 objset.Copy("d:/123") End Sub
备注:如果目标文件夹不存在,则脚本在运行是将自动创建
Delete的使用
方法名:Delete(force)
说明:删除文件夹及里面的所有内容。详细说明请见表5
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法来返回Folder对象 Set objset = fso.getFolder(sourcepath) '将testingw文件夹及文件夹里所有的内容全部删除 objset.Delete(True) End Sub
备注:如果文件夹属性为只读且Delete的参数为False,则脚本在运行是将提示“没有权限”;当文件夹不存在时,将提示“路径未找到”。
Move的使用
方法名:Move(destination)
说明:将文件夹及里面所有的内容移动到 destination 指定的文件夹。详细说明请见表5
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法来返回Folder对象 Set objset = fso.getFolder(sourcepath) '使用Move()将testing文件夹及里面所有的内容,移动到目标文件夹123中 objset.Move("C:/123") End Sub
备注:如果目标文件夹123已存在,则脚本运行时提示“文件已存在”;如果目标文件夹123在D:/,则脚本运行使提示“没有权限”
CreateTextFile的使用
方法名:CreateTextFile(filename,overwrite,unicode)
说明:创建指定文件并返回 TextStream 对象,该对象可用于读或写创建的文件。详细说明请见表5。
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法来返回Folder对象 Set objset = fso.getFolder(sourcepath) '在testing文件夹下,使用CreateTextFile()创建myClass2.doc文件 objset.CreateTextFile "myClass2.doc",true End Sub
备注:CreateTextFile()所创建的文件类型是根据所提供的扩展名来确定的,如也可以写成myClass2.txt、myClass.exe等等;FileSystemObject对象也可以调用CreateTextFile(),我们可以将上面的代码改写成:
fso.CreateTextFile “C:/testing/myClass.doc”,true
Folder对象所提供的属性:
表6 Folder 对象的属性及说明 |
|
属性 |
说明 |
Attributes |
返回文件夹的属性。可以是下列值中的一个或其组合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名称)(8)、Directory(文件夹)(16)、Archive(32)、Alias(64) 和 Compressed(128)。例如,一个隐藏的只读文件,Attributes 的值为 3 |
DateCreated |
返回该文件夹的创建日期和时间 |
DateLastAccessed |
返回最后一次访问该文件夹的日期和时间 |
DateLastModified |
返回最后一次修改该文件夹的日期和时间 |
Drive |
返回该文件夹所在的驱动器的驱动器字母 |
Files |
返回 Folder 对象包含的 Files 集合,表示该文件夹内所有的文件 |
IsRootFolder |
返回一个布尔值说明该文件夹是否是当前驱动器的根文件夹 |
Name |
设定或返回文件夹的名字 |
ParentFolder |
返回该文件夹的父文件夹对应的 Folder 对象 |
Path |
返回文件夹的绝对路径,使用相应的长文件名 |
ShortName |
返回 DOS 风格的 8.3 形式的文件夹名 |
ShortPath |
返回 DOS 风格的 8.3 形式的文件夹的绝对路径 |
Size |
返回包含在该文件夹里所有文件和子文件夹的大小 |
SubFolers |
返回该文件夹内包含的所有子文件夹对应的 Folders 集合,包括隐藏文件夹和系统文件夹 |
Type |
如果可能,返回一个文件夹的说明字符串(例如,“Recycle Bin”) |
如上面提到的,我们可以使用下面的脚本来访问Folder对象
Dim objfso,objset '创建FileSystemObject对象 Set objfso = createobject("Scripting.FileSystemObject") '返回C:/testing的Folder的对象 Set objset = objfso.GetFolder("C:/testing")
注:通过Folder对象我们就可以访问其提供的方法及属性
Drive、DateCreated、Name属性的使用
示例:
Dim sourcepath sourcepath = "C:/testing" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法来返回Folder对象 Set objset = fso.getFolder(sourcepath) '通过Folder对象来访问Folder属性 reporter.ReportEvent micDone ,"测试Folder属性","文件夹所在的磁盘为:" & objset.Drive & " 文件夹所创建的日期:" & objset.DateCreated & " 文件夹的名字为:" & objset.Name End Sub
SubFolers属性的使用
示例:
Dim sourcepath sourcepath = "C:/Program Files/Common Files" Call FolderAttributes(sourcepath) Sub FolderAttributes(sourcepath) Dim fso,objset,objFolders,FolderName,i i = 0 Set fso = CreateObject("Scripting.FileSystemObject") '使用GetFolder方法来返回Folder对象 Set objset = fso.getFolder(sourcepath) 'SubFolders属性将返回所有子文件夹对应的Folder集合 Set objFolders = objset.SubFolders '遍历Folder集合,统计出共有多少个文件夹,及相关文件夹的名字 For Each objFolder in objFolders i = i +1 'vbcr为换行符 FolderName = FolderName + objFolder.Name + vbcr Next msgbox ("共有" & i &"个文件夹,文件夹的名字为:" & FolderName) End Sub
Files属性的使用
示例:
Dim objFso,objGetFolder,intCount,strFileName intCount = 0 '创建FileSystemObject对象 Set objFso= CreateObject("Scripting.FileSystemObject") '使用GetFolder()获得文件夹对象 Set objGetFolder = objFso.GetFolder("C:/test") '遍历Files集合并显示文件夹中所有的文件名 For Each strFile in objGetFolder.Files intCount = intCount + 1 strFileName =strFileName & "第" & intCount & "个文件夹名为:" & strFile.Name & vbcr Next msgbox strFileName
3. 以文件有关的方法及属性
用FileSystemObject对象来操作文件的方法:
表7 与文件有关的方法及说明 |
|
方法 |
说明 |
CopyFile(source,destination,overwrite) |
将 source(可包含通配符)指定的一个或多个文件复制到指定的目标文件夹 destination。如果 source 包含通配符或 destination 末尾是路径分隔符(‘'),那么认为 destination 是文件夹。否则认为 destination 为一新文件的完全路径和名称。如果目标文件夹已经存在且 overwrite 参数设置为 False,将产生错误。缺省的 overwrite 参数是 True |
CreateTextFile(filename,overwrite,unicode) |
用指定的文件名 filename 在磁盘上创建一个新的文本文件,并返回与其对应的 TextStream 对象,如果可选的 overwrite 参数设置为 True,则覆盖同一路径下已有的同名文件。缺省的 overwrite 参数是 False。如果可选的 unicode 参数设置为 True,则该文件的内容将存储为 Unicode 文本,缺省的 unicode 参数是 False |
DeleFile(filespec,force) |
删除由 filespec 指定的一个或多个文件(可以在路径的最后部分包含通配符)。如果可选的 force 参数设置为 true,那么也删除具有只读属性的文件。缺省的 force 参数是False |
FileExists(filespec) |
如果 filespec 指定的文件存在则返回 True,否则返回 False。filespec 参数可以包含文件的绝对路径或相对路径,或者是当前文件夹中的文件名 |
GetBaseName(filespec) |
返回 filespec 指定的文件的名称,即包含文件路径但去掉了文件的扩展名 |
GetExtensionName(filespec) |
返回 filespec 指定的文件的扩展名 |
GetFile(filespec) |
返回 filespec 指定的文件所对应的 File 对象。可以指定文件的相对或绝对路径 |
GetFileName(pathspec) |
返回pathspec 指定的文件的路径或文件名,如果没有文件名就返回最后的文件夹名。不检查该文件或文件夹是否存在 |
GetTempName() |
返回一个随机产生的文件名,用于完成运算所需的临时文件或文件夹 |
MoveFile(source,destination) |
将 source 指定的一个或多个源文件移动到 destination 指定的目的文件夹。在 source里可以包含通配符,但 destination 不行。如果 source 包含通过配符或 destination 末尾是路径分隔符(‘'),那么认为 destination 是一文件夹。否则,认为 destination 是一新文件夹的完整路径和名称。如果目的文件夹已经存在则产生错误 |
OpenTextFile(filename,iomode,create,format) |
创建一个名叫做 filename 的文件,或打开一个现有的名为 filename 的文件,并且返回一个与其相关的 TextStream 对象。filename 参数可以包含绝对或相对路径。iomode 参数指定了所要求的访问类型。允许的数值是 ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。当写入或追加到一个不存在的文件时,如果 create 参数设置为 true,就将创建一个新文件。缺省的 create 参数是 False。format 参数说明对文件读或写的数据格式。允许数值是:TristatetFalse(0)(缺省),按照 ASCII 格式打开;TristatetTrue(-1),按照 Unicode 格式打开;TristateDefault(-2),用系统缺省格式打开 |