安大互联
财经热点 > Asp编程 > Scripting.FileSystemObject对象
Scripting.FileSystemObject对象
浏览次数:【273】  发布日期:2009-8-13 12:09:22    文章分类:Asp编程   
专题:】 【
 


    FileSystemObject对象提供对计算机文件全面的访问,它允许我们在代码内操作文本文件、文件夹及驱动器。它是脚本运行期库提供的对象之一,对于服务器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对象提供了使用隶属对象的一系列方法,隶属对象包含Drive、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
       或用JScript:
       // In Jscript
       var objFSO = Server.CreateObject(‘Scripting.FileSystemObject’);
       for (var intCode = 65; intCode <= 90; intCode++) {    //ANSI codes for ‘A’ to ‘Z’
              strLetter = String.formCharCode(intCode);
              If (objFSO.DriveExists(strLetter))
                     Response.Write (‘Found drive ‘ + strLetter + “:<BR>”);
       }
       这两个程序段的运行结果是相同的,如图5-9所示:


       这一页面为driveexists_vb.asp,由本书的示例文件提供。
1.  Drive对象
正如已经看到的,FileSystemObject对象包含一个属性——Drives,它返回一个包含本地计算机上所有可用驱动器的集合。
Drives集合里的每个条目是一个Drive对象。Drive对象的属性如表5-8所示:
表5-8  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对象,可以在服务器上发生一个驱动器列表,与通过检查每个可能的驱动器字母来判别驱动器是否存在的要领相比,效率更高。我们也可以得到关于该驱动器的信息。在VBScript里,代码如下:
' In VBScript:
' create a FileSystemObject instance
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
' create a Drives collection
Set colDrives = objFSO.Drives
' iterate through the Drives collection
For Each objDrive in colDrives

  Response.Write "DriveLetter: <B>" & objDrive.DriveLetter & "</B>   "
  Response.Write "DriveType: <B>" & objDrive.DriveType
  Select Case objDrive.DriveType
    Case 0: Response.Write " - (Unknown)"
    Case 1: Response.Write " - (Removable)"
    Case 2: Response.Write " - (Fixed)"
    Case 3: Response.Write " - (Network)"
    Case 4: Response.Write " - (CDRom)"
    Case 5: Response.Write " - (RamDisk)"
  End Select
  Response.Write "</B>   "

If objDrive.DriveType = 3 Then
    If objDrive.IsReady Then
      Response.Write "Remote drive with ShareName: <B>" & objDrive.ShareName & "</B>"
    Else
Response.Write "Remote drive - <B>IsReady</B> property returned_
<B>False</B><BR>"
    End If
  Else If objDrive.IsReady then
    Response.Write "FileSystem: <B>" & objDrive.FileSystem & "</B>   "
    Response.Write "SerialNumber: <B>" & objDrive.SerialNumber & "</B><BR>"
Response.Write "Local drive with VolumeName: <B>" & _
objDrive.VolumeName & "</B><BR>"
Response.Write "AvailableSpace: <B>" & FormatNumber( _
objDrive.AvailableSpace / 1024, 0) & "</B> KB   "
Response.Write "FreeSpace: <B>" & FormatNumber( _
objDrive.FreeSpace / 1024, 0) & "</B> KB   "
Response.Write "TotalSize: <B>" & FormatNumber(_
objDrive.TotalSize / 1024, 0) & "</B> KB"
  End if  
  Response.Write "<P>"
  End if
Next
       注意,不能用预定义常数Network比较驱动器的DriveType属性,因为(至少在scrrun.dll的当前版本中)在类型库中省略了Network常数,因此不再作为公用的常数使用。
在JScript中,该程序是:
// In JScript:
// create a FileSystemObject instance
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
// create a Drives collection
var colDrives = new Enumerator(objFSO.Drives);

for (; !colDrives.atEnd(); colDrives.moveNext()) {
  objDrive = colDrives.item();
  Response.Write('DriveLetter: ' + objDrive.DriveLetter + '<BR>');
  Response.Write('DriveType: ' + objDrive.DriveType + '<BR>');

  if (objDrive.DriveType == 3)
    if (objDrive.IsReady)
      Response.Write('Remote drive with ShareName: ' +
                     objDrive.ShareName + '<BR>')
    else
      Response.Write('Remote drive - IsReady property returned False<BR><BR>');
    else if (objDrive.IsReady) {
      Response.Write('Local drive with VolumeName: ' +
                    objDrive.VolumeName + '<BR>');
    Response.Write('FileSystem: ' + objDrive.FileSystem + '<BR>');
    Response.Write('SerialNumber: ' + objDrive.SerialNumber + '<BR>');
    Response.Write('AvailableSpace: ' + objDrive.AvailableSpace + ' bytes<BR>');
    Response.Write('FreeSpace: ' + objDrive.FreeSpace + ' bytes<BR>');
    Response.Write('TotalSize: ' + objDrive.TotalSize + ' bytes<P>');
}
}
       在系统上运行这段程序以前有一点要谨防。如果在A驱动器里没有磁盘,或CD-ROM驱动器里没有光盘,将得到一个错误提示:“Disk Not Ready”。除了DriveLetter属性和DriveType属性外,在使用其它属性和方法前,通过检查每个驱动器的IsReady属性,可以保护该页面。
       当在服务器上运行以上VBScript代码时,运行结果如图5-10所示。这一页面为drivescollection_vb.asp,来自本书提供的示例文件。

2.  文件系统定位
FileSystemObject的几个方法可用于得到其它对象的引用,因此可以在服务器的文件系统和任何网络驱动器中定位。其实,在ASP代码里使用的所有对象或组件中,除了ActiveX Data Object组件,FileSystemObject对象有可能是最复杂的对象之一。
这种复杂性是由于对如何访问文件全面的不同部分,要求有极高的灵活性。例如,可以从FileSystemObject向下通过使用各种隶属对象定位一个文件。其过程是从Drives集合开始,到一个Drive对象,再到驱动器的根Folder对象,然后到子Folder对象,再到文件夹的Files集合,最后到集合内的File对象。
另外,如果已知要访问的驱动器、文件夹或文件。可以直接对其使用GetDrive、GetFolder、GetSpecialFolder和GetFile方法。图5-11有助于理解所有文件系统定位相关的组件、对象、方法和属性之间的关系。

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
JScript程序如下:
//In JScript:
// Create a FileSystemObject instance
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
// Get a reference to drive C
var objDriveC = objFSO.GetDrive('C:');
// Get a reference to the root folder
var objRoot = objDriveC.RootFolder;
// Get a reference to the first folder in the SubFolders collection
var colAllFolders = new Enumerator(objRoot.SubFolders);
var objFolder1 = colAllFolders.item();
// Get a reference to the Files collection for this folder
var colFiles = new Enumerator(objFolder1.Files);

// Iterate through all the files in this collection
for (; !colFiles.atEnd(); colFiles.moveNext()) {
  objFile = colFiles.item()
  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('Accessed: ' + objFile.DateLastAccessed + '   ');
  Response.Write('Modified: ' + objFile.DateLastModified + '<P>');
}
该VBScript程序在服务器上运行时的结果如图5-12所示。该页面为folderscollection_vb.asp,来自本书提供的示例文件。

(3)    使用特殊文件夹
GetSpecialFolder是FileSystemObject对象的要领之一,它返回计算机上三个“特殊文件夹”对应的Folder对象:
· WindowsFolder:%Windows%目录,缺省为WinNT(或Windows,在非NT/2000计算机上)目录。
· SystemFolder:%System%目录,缺省为WinNTSystem32(或WindowsSystem,在非NT/2000计算机上)目录。
· TemporaryFolder:%Temp%目录,缺省为WinNTTemp(或WindowsTemp,在非NT/2000计算机上)目录。
为得到对特殊文件夹的引用,我们提供相应的预定义常数作为GetSpecialFolder方法的参数:
' In VBScript:
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

Set objFolder = objFSO.GetSpecialFolder(WindowsFolder)
Response.Write "GetSpecialFolder(WindowsFolder) returned:<BR>"
Response.Write "Path: " & objFolder.Path & "<BR>"
Response.Write "Type: " & objFolder.Type & "<P>"

Set objFolder = objFSO.GetSpecialFolder(SystemFolder)
Response.Write "GetSpecialFolder(SystemFolder) returned:<BR>"
Response.Write "Path: " & objFolder.Path & "<BR>"
Response.Write "Type: " & objFolder.Type & "<P>"

Set objFolder = objFSO.GetSpecialFolder(TemporaryFolder)
Response.Write "GetSpecialFolder(TemporaryFolder) returned:<BR>"
Response.Write "Path: " & objFolder.Path & "<BR>"
Response.Write "Type: " & objFolder.Type & "<P>"
或用JScript:
// In JScript:
var objFSO = Server.CreateObject('Scripting.FileSystemObject');

var objFolder = objFSO.GetSpecialFolder(WindowsFolder);
Response.Write('GetSpecialFolder(WindowsFolder) returned -  ');
Response.Write('Path: ' + objFolder.Path + '   ');
Response.Write('Type: ' + objFolder.Type + '<BR>');

var objFolder = objFSO.GetSpecialFolder(SystemFolder);
Response.Write('GetSpecialFolder(SystemFolder) returned -  ');
Response.Write('Path: ' + objFolder.Path + '   ');
Response.Write('Type: ' + objFolder.Type + '<BR>');

var objFolder = objFSO.GetSpecialFolder(TemporaryFolder);
Response.Write('GetSpecialFolder(TemporaryFolder) returned -  ');
Response.Write('Path: ' + objFolder.Path + '   ');
Response.Write('Type: ' + objFolder.Type + '<BR>');
该VBScript程序在服务器上运行时的结果如图5-13所示。该页面名为specialfolder_vb.asp,来自本书提供的示例文件。

2.  File对象
File对象提供了对文件的属性的访问,通过它的要领能够对文件进行操作。每个Folder对象提供了一个Files集合,包含文件夹中文件对应的File对象。还可以直接地从FileSystemObject对象中通过使用GetFile方法得到一个File对象引用。
(1)      File对象的属性
File对象有全面的属性,类似于Folder对象的属性,如表5-11所示:
表5-11  File对象的属性及说明
属 性
说 明

Attributes
返回文件的属性。可以是下列值中的一个或其组合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名称)(9)、Directory(文件夹)(16)、Archive(32)、Alias(64)和Compressed(128)

DateCreated
返回该文件夹的建立日期和时间

DateLastAccessed
返回最后一次访问该文件的日期和时间

DateLastModified
返回最后一次更改该文件的日期和时间

Drive
返回该文件所在的驱动器的Drive对象

Name
设定或返回文件的称号

ParentFolder
返回该文件的父文件夹的Folder对象

Path
返回文件的绝对路径,可使用长文件名

ShortName
返回DOS类型的8.3形式的文件名

ShortPath
返回DOS类型的8.3形式的文件绝对路径

Size
返回该文件的大小(字节)

Type
如果可能,返回一个文件类型的说明字符串(好比:“Text Document”表示.txt文件)

       (2)  File对象的要领
       同样类似于Folder对象,File对象的要领允许复制、删除和移动文件。它也有一个使用文本流打开文件的要领。File对象的要领及说明如表5-12所示:
表5-12  File对象的要领及说明
方 法
说 明

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

OpenAsTextStream
(iomode,format)
打开指定文件并且返回一个TextStream对象,用于文件的读、写或追加。iomode参数指定了要求的访问类型,允许值是ForReading(1) (缺省值)、ForWrite(2)、ForAppending(8)。format参数说明了读、写文件的数据格式。允许值是TristateFalse(0)(缺省),说明用ASCII数据格式;TristateTrue(-1)说明用Unicode数据格式;TristateUseDefault(-2)说明使用系统缺省格式

       因此给定一个File对象后,可以使用ParentFolder属性得到包含该文件的Folder对象的引用,用来在文件系统中导航。甚至可以用Drive属性获得相应的Drive对象的引用,并得到各种Folder对象和所包含的File对象。
       另外,给定一个Folder对象和对应的Files集合后,可以通过遍历该集合检查这一文件夹中的每个文件。还可以使用File对象的各种方法以一定方式处理该文件,如复制、移动或删除。下面的代码给出了C驱动器的第壹个文件夹的文件列表:
       ' 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
注意,不能使用数字索引来定位Folders或Files集合里的条目,因此务必使用For Each … Next语句遍历该集合直到刚开始的条目,然后使用该条目的Name属性。也不得不使用嵌套的圆括号强迫其作为值(字符串)传送给该Folders集合的Item方法。
用下面的JScript程序可完成同样的工作:
// In JScript:
// Create a FileSystemObject instance
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
// Get a reference to drive C
var objDriveC = objFSO.GetDrive('C:');
// Get a reference to the root folder
var objRoot = objDriveC.RootFolder;
// Get a reference to the first folder in the SubFolders collection
var colAllFolders = new Enumerator(objRoot.SubFolders);
var objFolder1 = colAllFolders.item();
// Get a reference to the Files collection for this folder
var colFiles = new Enumerator(objFolder1.Files);

// Iterate through all the files in this collection
for (; !colFiles.atEnd(); colFiles.moveNext()) {
  objFile = colFiles.item()
  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('Accessed: ' + objFile.DateLastAccessed + '   ');
  Response.Write('Modified: ' + objFile.DateLastModified + '<P>');
}
两个程序的结果是相同的,如图5-14所示。该页面为filescollection_vb.asp,来自本书提供的示例文件。


    在C驱动器上的第壹个文件夹可能是CAConfig,缺省情境下该文件夹是空的。这种情景下,可先向该文件夹复制一些文件,完成实验以后再删除这些文件。


手机扫码浏览该文章
 ● 相关资讯专题
  • 网络建设业务咨询

   TEl:13626712526