Scripting.FileSystemObject对象的详细技巧指南
Scripting.FileSystemObject对象的详细技巧指南
FileSystemObject对象提供对计算机文件系统的访问:
powered by 25175.net在代码内操作文本文件、文件夹及驱动器。它是脚本运行期库提供的对象之一,对于服务器ASP页面内的VBScript和JScript都有效。如果页面的扩展名为.hta(表示它们是HTA的一部分),它也可用在客户端的IE 5中。本节仅讨论在服务器上的ASP脚本如何使用FileSystemObject对象。
? ?? ? 超级文本应用程序(HTA)由指定的“受信任的”页面组成,在页面的<HEAD>段里包含<HTA: APPLICATION>元素。例如:
? ? <HTA:APPLICATION ID=”objMyApp” APPLICATIONNAME=”myApp”>
这些页面可以使用客户端脚本引擎中的一些不常用特性,这些特性中有FileSystemObject对象和TextStream对象。关于超级文本应用程序的更多信息,请访问Microsoft Workshop网站。
可以使用下面的程序创建一个FileSystemObject对象实例:
‘ In VBScript:
Dim objMyFSO
Set objMyFSO = Server.CreateObject(“Scripting.FileSystemObject”)
// In JScript:
var objMyFSO = Server.CreateObject(‘Scripting.FileSystemObject’);
<!-- Server-side with an OBJECT element -->
<OBJECT RUNAT=”SERVER” SCOPE=”PAGE” ID=”objFSO”
? ?? ?? ?? ???PROGID=”Scripting.FileSystemObject”>
</OBJECT>
在ASP页面里,增加一个对于FileSystemObject类型库的引用是非常有用的。这允许使用它直接定义的内置常数,不用像过去那样用数字等效表达式代替。整个脚本运行期库的类型库可以增加到任何ASP页面中,代码如下:
<!-- METADATA TYPE=”typelib” FILE=”C:WinNTSystem32scrrun.dll” -->如果你是在另一个目录下安装Windows,必须编辑FILE的属性值。
5.4.1 FileSystemObject对象成员概要
? ?? ? FileSystemObject对象提供一个属性和一系列方法,可用它们来操纵FileSystemObject对象实现的一些从属对象。这里提供了全部的内容概要,然后介绍每一个从属对象。
1.??FileSystemObject的属性
FileSystemObject对象只有一个属性,它用于得到当前机器上的所有有效驱动器的列表,如表5-4所示:
表5-4??FileSystemObject对象的属性及说明
属 性?
说 明?
Drivers?
返回本地计算机可用的驱动器列表。?
2.??FileSystemObject的方法
FileSystemObject对象提供了使用从属对象的一系列方法,从属对象包—rive、Folder和File等对象。它也实现了用于TextStream对象的两个方法:CreateTextFile和OpenTextFile。根据所使用的对象的类型,将方法划分为三类。
(1)? ? 与驱动器有关的方法
与驱动器有关的方法如表5-5所示:
表5-5 与驱动器有关的方法及说明
方 法?
说 明?
DriveExists(drivespec)?
如果在drivespec中指定的驱动器存在,则返回True,否则返回False。drivespec参数可以是一个驱动器字母,或者是文件、文件夹的完整绝对路径?
GetDrive(drivespec)?
返回drivespec指定的驱动器所对应的Drive对象。drivespec可以包含冒号、路径分隔符或者是网络共享名,即:“C”、“C:”、“C:”及“\machinesharename”?
GetDriveName(drivespec)?
用字符串返回drivespec指定的驱动器的名称。drivespec参数必须是文件或文件夹的绝对路径,或者仅仅是驱动器字母,例如:“c:”或“c”?
(2)? ? 与文件夹有关的方法
与文件夹有关的方法如表5-6所示:
表5-6??与文件夹有关的方法及说明
方 法?
说 明?
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?
FolderExist(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已经存在则产生错误?
(3)? ? 与文件有关的方法
与文件有关的方法如表5-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),用系统缺省格式打开?
? ?? ? Unicode文件使用两个字节标识每个字符,取消了ASCII字符最多256个的限制。
5.4.2 使用驱动器
? ?? ? 下面是使用FileSystemObject对象的简单例子,它使用DriveExists方法得到现有的驱动器字母的列表:
? ?? ? ‘ In VBScript
? ?? ? Set objFSO = Server.CreateObject(“Scripting.FileSystemObject”)
? ?? ? For intCode = 65 To 90? ?? ?? ?? ?? ? ‘ANSI codes for ‘A’ to ‘Z’
? ?? ?? ?? ???strLetter = Chr(intCode)
? ?? ?? ?? ???If objFSO.DriveExists(strLetter) Then
? ?? ?? ?? ?? ?? ?? ?Response.Write “Found drive “ & strLetter & “:<BR>”
? ?? ?? ?? ???End If
? ?? ? Next
??????
?
1.??Folder对象
Driver对象的RootFolder属性返回一个Folder对象,通过该对象可访问这个驱动器内的所有的内容。可以使用这个Folder对象的属性和方法遍历驱动器上的目录,并得到该文件夹和其他文件夹的属性。
(1)? ? Folder对象的属性
Folder对象提供一组属性,可用这些属性得到关于当前文件夹的更多信息,也可以改变该文件夹的名称。其属性及说明如表5-9所示:
表5-9??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”)?
(2)? ? Folder对象的方法
Folder对象提供一组可用于复制、删除和移动当前文件夹的方法。这些方法的运行方式与FileSystemObject对象的CopyFolder、DeleFolder和MoveFolder方法相同,但这些方法不要求source参数,因为源文件就是这个文件夹。这些方法及说明如表5-10所示:
表5-10??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?
? ?? ? 在文件夹之间可以使用当前文件夹的ParentFolder属性,返回到父目录。当到达一个文件夹时,如果IsRootFolder属性是True,就停下来。离开驱动器的根目录,沿目录树向下,可遍历或访问在Folders集合(由当前文件夹的SubFolders属性返回)内的指定文件夹。
? ?? ? 下列程序遍历了驱动器C根目录内的所有文件夹,并显示各个文件夹的有关信息。
? ?? ? VBScript程序如下:
? ?? ? 'In VBScript:
' Create a FileSystemObject instance
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
' Get a reference to drive C
Set objDriveC = objFSO.GetDrive("C:")
' Get a reference to the root folder
Set objRoot = objDriveC.RootFolder
' Get a reference to the SubFolders collection
Set objFolders = objRoot.SubFolders
' Get a reference to the first folder in the SubFolders collection
For Each objFolder In objFolders
??Set objFolder1 = objFolders.Item((objFolder.Name))
??Exit For
Next
' Iterate through all the files in this folder
For Each objFile in objFolder1.Files
??Response.Write "Name: " & objFile.Name & "? ?"
??Response.Write "ShortName: " & objFile.ShortName & "? ?"
??Response.Write "Size: " & objFile.Size & " bytes? ? "
??Response.Write "Type: " & objFile.Type & "<BR>"
??Response.Write "Path: " & objFile.Path & "? ?"
??Response.Write "ShortPath: " & objFile.ShortPath & "<BR>"
??Response.Write "Created: " & objFile.DateCreated & "? ?"
??Response.Write "LastModified: " & objFile.DateLastModified & "<P>"
Next