談Scripting.FileSystemObject對(duì)象
FileSystemObject對(duì)象提供對(duì)計(jì)算機(jī)文件系統(tǒng)的訪問,它允許我們?cè)诖a內(nèi)操作文本文件、文件夾及驅(qū)動(dòng)器。它是腳本運(yùn)行期庫(kù)提供的對(duì)象之一,對(duì)于服務(wù)器ASP頁(yè)面內(nèi)的VBScript和JScript都有效。如果頁(yè)面的擴(kuò)展名為.hta(表示它們是HTA的一部分),它也可用在客戶端的IE 5中。本節(jié)僅討論在服務(wù)器上的ASP腳本如何使用FileSystemObject對(duì)象。
       超級(jí)文本應(yīng)用程序(HTA)由指定的“受信任的”頁(yè)面組成,在頁(yè)面的<HEAD>段里包含<HTA: APPLICATION>元素。例如:
    <HTA:APPLICATION ID=”objMyApp” APPLICATIONNAME=”myApp”>
這些頁(yè)面可以使用客戶端腳本引擎中的一些不常用特性,這些特性中有FileSystemObject對(duì)象和TextStream對(duì)象。關(guān)于超級(jí)文本應(yīng)用程序的更多信息,請(qǐng)?jiān)L問Microsoft Workshop網(wǎng)站。
可以使用下面的程序創(chuàng)建一個(gè)FileSystemObject對(duì)象實(shí)例:
‘ 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頁(yè)面里,增加一個(gè)對(duì)于FileSystemObject類型庫(kù)的引用是非常有用的。這允許使用它直接定義的內(nèi)置常數(shù),不用像過去那樣用數(shù)字等效表達(dá)式代替。整個(gè)腳本運(yùn)行期庫(kù)的類型庫(kù)可以增加到任何ASP頁(yè)面中,代碼如下:
<!-- METADATA TYPE=”typelib” FILE=”C:WinNTSystem32scrrun.dll” -->如果你是在另一個(gè)目錄下安裝Windows,必須編輯FILE的屬性值。
5.4.1 FileSystemObject對(duì)象成員概要
       FileSystemObject對(duì)象提供一個(gè)屬性和一系列方法,可用它們來(lái)操縱FileSystemObject對(duì)象實(shí)現(xiàn)的一些從屬對(duì)象。這里提供了全部的內(nèi)容概要,然后介紹每一個(gè)從屬對(duì)象。
1.  FileSystemObject的屬性
FileSystemObject對(duì)象只有一個(gè)屬性,它用于得到當(dāng)前機(jī)器上的所有有效驅(qū)動(dòng)器的列表,如表5-4所示:
表5-4  FileSystemObject對(duì)象的屬性及說(shuō)明
屬 性
說(shuō) 明

Drivers
返回本地計(jì)算機(jī)可用的驅(qū)動(dòng)器列表。

2.  FileSystemObject的方法
FileSystemObject對(duì)象提供了使用從屬對(duì)象的一系列方法,從屬對(duì)象包括Drive、Folder和File等對(duì)象。它也實(shí)現(xiàn)了用于TextStream對(duì)象的兩個(gè)方法:CreateTextFile和OpenTextFile。根據(jù)所使用的對(duì)象的類型,將方法劃分為三類。
(1)    與驅(qū)動(dòng)器有關(guān)的方法
與驅(qū)動(dòng)器有關(guān)的方法如表5-5所示:
表5-5 與驅(qū)動(dòng)器有關(guān)的方法及說(shuō)明
方 法
說(shuō) 明

DriveExists(drivespec)
如果在drivespec中指定的驅(qū)動(dòng)器存在,則返回True,否則返回False。drivespec參數(shù)可以是一個(gè)驅(qū)動(dòng)器字母,或者是文件、文件夾的完整絕對(duì)路徑

GetDrive(drivespec)
返回drivespec指定的驅(qū)動(dòng)器所對(duì)應(yīng)的Drive對(duì)象。drivespec可以包含冒號(hào)、路徑分隔符或者是網(wǎng)絡(luò)共享名,即:“C”、“C:”、“C:”及“\machinesharename”

GetDriveName(drivespec)
用字符串返回drivespec指定的驅(qū)動(dòng)器的名稱。drivespec參數(shù)必須是文件或文件夾的絕對(duì)路徑,或者僅僅是驅(qū)動(dòng)器字母,例如:“c:”或“c”

(2)    與文件夾有關(guān)的方法
與文件夾有關(guān)的方法如表5-6所示:
表5-6  與文件夾有關(guān)的方法及說(shuō)明
方 法
說(shuō) 明

BuildPath(path,name)
在已有的路徑path上增添名字為name的文件或文件夾,如果需要,則增添路徑分隔符’’

CopyFolder(source,destination,overwrite)
從指定的源文件夾source(可以包含通配符)中復(fù)制一個(gè)或多個(gè)文件夾到指定的目標(biāo)文件夾destination,包含了源文件夾中的所有文件。如果source包含通配符或destination末尾是路徑分隔符(‘’),那么認(rèn)為destination是要放置源文件夾的拷貝的文件夾。否則的話,認(rèn)為destination是要?jiǎng)?chuàng)建的新文件夾的路徑名。如果destination文件夾已經(jīng)存在且overwrite參數(shù)設(shè)置為False,將產(chǎn)生錯(cuò)誤,缺省的overwrite參數(shù)是True

CreateFolder(foldername)
創(chuàng)建一個(gè)路徑名為foldername的文件夾。如果foldername已經(jīng)存在將產(chǎn)生錯(cuò)誤

DeleteFolder(folderspec,force)
刪除由folderspec指定的一個(gè)或多個(gè)文件夾(可以在路徑的最后部分包含通過配符)及文件夾中的所有內(nèi)容。如果可選的force參數(shù)設(shè)置為true,那么即使文件夾包含的文件具有只讀屬性,也將刪除該文件夾。缺省的force參數(shù)是False

FolderExist(folderspec)
如果folderspec指定的文件夾存在則返回True,否則返回False。folderspec參數(shù)可以包含文件夾的絕對(duì)或相對(duì)路徑,或者僅僅是當(dāng)前文件夾中看到的文件夾名

GetAbsolutePathName(pathspec)
返回明確指定文件夾的路徑,其中要考慮到當(dāng)前文件夾的路徑。例如,如果當(dāng)前文件夾是“c:docssales”,而pathspec是“jan”,返回的字符是“cocssalesjan”。通配符、”..”和”\”路徑操作符都是可以接受的

GetFolder(folderspec)
返回folderspec指定的文件夾對(duì)應(yīng)的Folder對(duì)象。folderspec可以是文件夾的相對(duì)的或絕對(duì)的路徑

GetParentFolderName(pathspec)
返回pathspec文件或文件夾的上一級(jí)文件夾。不檢驗(yàn)該文件夾是否存在

GetSpecialfolder(folderspec)
返回一個(gè)特定的Windows文件夾相對(duì)應(yīng)的Folder對(duì)象。參數(shù)folderspec的允許值是WindowsFolder(0)、SystemFolder(1)和TemporaryFolder(2)

MoveFolder(source,destination)
將source指定的一個(gè)或多個(gè)文件夾移動(dòng)到destination指定的文件夾。在source里可以包含通配符,但在destination中不行。如果source包含通配符或destination末尾是路徑分隔符(‘’),則認(rèn)為destination是要放置源文件夾的文件夾,否則認(rèn)為它是一個(gè)新文件夾的完整路徑和名字。如果目的文件夾destination已經(jīng)存在則產(chǎn)生錯(cuò)誤

(3)    與文件有關(guān)的方法
與文件有關(guān)的方法如表5-7所示:
方 法
說(shuō) 明

CopyFile(source,destination,
overwrite)
將source(可包含通配符)指定的一個(gè)或多個(gè)文件復(fù)制到指定的目標(biāo)文件夾destination。如果source包含通配符或destination末尾是路徑分隔符(‘’),那么認(rèn)為destination是文件夾。否則認(rèn)為destination為一新文件的完全路徑和名稱。如果目標(biāo)文件夾已經(jīng)存在且overwrite參數(shù)設(shè)置為False,將產(chǎn)生錯(cuò)誤。缺省的overwrite參數(shù)是True

CreateTextFile(filename,overwrite,
unicode)
用指定的文件名filename在磁盤上創(chuàng)建一個(gè)新的文本文件,并返回與其對(duì)應(yīng)的TextStream對(duì)象,如果可選的overwrite參數(shù)設(shè)置為True,則覆蓋同一路徑下已有的同名文件。缺省的overwrite參數(shù)是False。如果可選的unicode參數(shù)設(shè)置為True,則該文件的內(nèi)容將存儲(chǔ)為Unicode文本,缺省的unicode參數(shù)是False

DeleFile(filespec,force)
刪除由filespec指定的一個(gè)或多個(gè)文件(可以在路徑的最后部分包含通配符)。如果可選的force參數(shù)設(shè)置為true,那么也刪除具有只讀屬性的文件。缺省的force參數(shù)是False

FileExists(filespec)
如果filespec指定的文件存在則返回True,否則返回False。filespec參數(shù)可以包含文件的絕對(duì)路徑或相對(duì)路徑,或者是當(dāng)前文件夾中的文件名

GetBaseName(filespec)
返回filespec指定的文件的名稱,即包含文件路徑但去掉了文件的擴(kuò)展名

GetExtensionName(filespec)
返回filespec指定的文件的擴(kuò)展名

GetFile(filespec)
返回filespec指定的文件所對(duì)應(yīng)的File對(duì)象。可以指定文件的相對(duì)或絕對(duì)路徑

GetFileName(pathspec)
返回pathspec指定的文件的路徑或文件名,如果沒有文件名就返回最后的文件夾名。不檢查該文件或文件夾是否存在

GetTempName()
返回一個(gè)隨機(jī)產(chǎn)生的文件名,用于完成運(yùn)算所需的臨時(shí)文件或文件夾

MoveFile(source,destination)
將source指定的一個(gè)或多個(gè)源文件移動(dòng)到destination指定的目的文件夾。在source里可以包含通配符,但destination不行。如果source包含通過配符或destination末尾是路徑分隔符(‘’),那么認(rèn)為destination是一文件夾。否則,認(rèn)為destination是一新文件夾的完整路徑和名稱。如果目的文件夾已經(jīng)存在則產(chǎn)生錯(cuò)誤

OpenTextFile(filename,iomode,create,
    format)
創(chuàng)建一個(gè)名叫做filename的文件,或打開一個(gè)現(xiàn)有的名為filename的文件,并且返回一個(gè)與其相關(guān)的TextStream對(duì)象。filename參數(shù)可以包含絕對(duì)或相對(duì)路徑。iomode參數(shù)指定了所要求的訪問類型。允許的數(shù)值是ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。當(dāng)寫入或追加到一個(gè)不存在的文件時(shí),如果create參數(shù)設(shè)置為true,就將創(chuàng)建一個(gè)新文件。缺省的create參數(shù)是False。format參數(shù)說(shuō)明對(duì)文件讀或?qū)懙臄?shù)據(jù)格式。允許數(shù)值是:TristatetFalse(0)(缺省),按照ASCII格式打開;TristatetTrue(-1),按照Unicode格式打開;TristateDefault(-2),用系統(tǒng)缺省格式打開

       Unicode文件使用兩個(gè)字節(jié)標(biāo)識(shí)每個(gè)字符,取消了ASCII字符最多256個(gè)的限制。

5.4.2 使用驅(qū)動(dòng)器
       下面是使用FileSystemObject對(duì)象的簡(jiǎn)單例子,它使用DriveExists方法得到現(xiàn)有的驅(qū)動(dòng)器字母的列表:
       ‘ 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>”);
       }
       這兩個(gè)程序段的運(yùn)行結(jié)果是相同的,如圖5-9所示:


       這一頁(yè)面為driveexists_vb.asp,由本書的示例文件提供。
1.  Drive對(duì)象
正如已經(jīng)看到的,F(xiàn)ileSystemObject對(duì)象包含一個(gè)屬性——Drives,它返回一個(gè)包括本地計(jì)算機(jī)上所有可用驅(qū)動(dòng)器的集合。
Drives集合里的每個(gè)條目是一個(gè)Drive對(duì)象。Drive對(duì)象的屬性如表5-8所示:
表5-8  Drive對(duì)象的屬性及說(shuō)明
屬 性
說(shuō) 明

AvailableSpave
考慮了帳戶定額和/或其他限制,返回驅(qū)動(dòng)器上對(duì)于該用戶可用的空間的大小

DriveLetter
返回驅(qū)動(dòng)器的字母

DriveType
返回驅(qū)動(dòng)器的類型。返回值可以是Unknown(0)、Removeable(1)、Fixed(2)、Network(3)、CDRom(4)和RamDisk(5)。然而需要注意的是當(dāng)前版本的scrrun.dll不支持預(yù)定義常數(shù)Network,必須使用十進(jìn)制3來(lái)代替

FileSystem
返回驅(qū)動(dòng)器文件系統(tǒng)的類型。返回值包括“FAT”、“NTFS”和“CDFS”

FreeSpace
返回驅(qū)動(dòng)器上可用剩余空間的總量

IsReady
返回一個(gè)布爾值表明驅(qū)動(dòng)器是否已準(zhǔn)備好

Path
返回一個(gè)由驅(qū)動(dòng)器字母和冒號(hào)組成的驅(qū)動(dòng)器路徑,即“C:”

RootFolder
返回代表的驅(qū)動(dòng)器根目錄文件夾的Folder對(duì)象

SerialNumber
返回一個(gè)用于識(shí)別磁盤卷的十進(jìn)制的序列號(hào)

ShareName
如果是一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,返回該驅(qū)動(dòng)器的網(wǎng)絡(luò)共享名

TotalSize
返回驅(qū)動(dòng)器的總?cè)萘浚ㄒ宰止?jié)為單位)

VolumeName
設(shè)定或返回本地驅(qū)動(dòng)器卷名

       因此,通過使用Drives集合里的Drive對(duì)象,可以在服務(wù)器上產(chǎn)生一個(gè)驅(qū)動(dòng)器列表,與通過檢查每個(gè)可能的驅(qū)動(dòng)器字母來(lái)判別驅(qū)動(dòng)器是否存在的方法相比,效率更高。我們也可以得到關(guān)于該驅(qū)動(dòng)器的信息。在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
       注意,不能用預(yù)定義常數(shù)Network比較驅(qū)動(dòng)器的DriveType屬性,因?yàn)椋ㄖ辽僭趕crrun.dll的當(dāng)前版本中)在類型庫(kù)中省略了Network常數(shù),因此不再作為公用的常數(shù)使用。
在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>');
}
}
       在系統(tǒng)上運(yùn)行這段程序以前有一點(diǎn)要注意。如果在A驅(qū)動(dòng)器里沒有磁盤,或CD-ROM驅(qū)動(dòng)器里沒有光盤,將得到一個(gè)錯(cuò)誤提示:“Disk Not Ready”。除了DriveLetter屬性和DriveType屬性外,在使用其他屬性和方法前,通過檢查每個(gè)驅(qū)動(dòng)器的IsReady屬性,可以保護(hù)該頁(yè)面。
       當(dāng)在服務(wù)器上運(yùn)行以上VBScript代碼時(shí),運(yùn)行結(jié)果如圖5-10所示。這一頁(yè)面為drivescollection_vb.asp,來(lái)自本書提供的示例文件。

2.  文件系統(tǒng)定位
FileSystemObject的幾個(gè)方法可用于得到其他對(duì)象的引用,因此可以在服務(wù)器的文件系統(tǒng)和任何網(wǎng)絡(luò)驅(qū)動(dòng)器中定位。事實(shí)上,在ASP代碼里使用的所有對(duì)象或組件中,除了ActiveX Data Object組件,F(xiàn)ileSystemObject對(duì)象很可能是最復(fù)雜的對(duì)象之一。
這種復(fù)雜性是由于對(duì)如何訪問文件系統(tǒng)的不同部分,要求有極高的靈活性。例如,可以從FileSystemObject向下通過使用各種從屬對(duì)象定位一個(gè)文件。其過程是從Drives集合開始,到一個(gè)Drive對(duì)象,再到驅(qū)動(dòng)器的根Folder對(duì)象,然后到子Folder對(duì)象,再到文件夾的Files集合,最后到集合內(nèi)的File對(duì)象。
另外,如果已知要訪問的驅(qū)動(dòng)器、文件夾或文件。可以直接對(duì)其使用GetDrive、GetFolder、GetSpecialFolder和GetFile方法。圖5-11有助于理解所有文件系統(tǒng)定位相關(guān)的組件、對(duì)象、方法和屬性之間的關(guān)系。

1.  Folder對(duì)象
Driver對(duì)象的RootFolder屬性返回一個(gè)Folder對(duì)象,通過該對(duì)象可訪問這個(gè)驅(qū)動(dòng)器內(nèi)的所有的內(nèi)容。可以使用這個(gè)Folder對(duì)象的屬性和方法遍歷驅(qū)動(dòng)器上的目錄,并得到該文件夾和其他文件夾的屬性。
(1)    Folder對(duì)象的屬性
Folder對(duì)象提供一組屬性,可用這些屬性得到關(guān)于當(dāng)前文件夾的更多信息,也可以改變?cè)撐募A的名稱。其屬性及說(shuō)明如表5-9所示:
表5-9  Folder 對(duì)象的屬性及說(shuō)明
屬 性
說(shuō) 明

Attributes
返回文件夾的屬性。可以是下列值中的一個(gè)或其組合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名稱)(8)、Directory(文件夾)(16)、Archive(32)、Alias(64)和Compressed(128)。例如,一個(gè)隱藏的只讀文件,Attributes的值為3

DateCreated
返回該文件夾的創(chuàng)建日期和時(shí)間

DateLastAccessed
返回最后一次訪問該文件夾的日期和時(shí)間

DateLastModified
返回最后一次修改該文件夾的日期和時(shí)間

Drive
返回該文件夾所在的驅(qū)動(dòng)器的驅(qū)動(dòng)器字母

Files
返回Folder對(duì)象包含的Files集合,表示該文件夾內(nèi)所有的文件

IsRootFolder
返回一個(gè)布爾值說(shuō)明該文件夾是否是當(dāng)前驅(qū)動(dòng)器的根文件夾

Name
設(shè)定或返回文件夾的名字

ParentFolder
返回該文件夾的父文件夾對(duì)應(yīng)的Folder對(duì)象

Path
返回文件夾的絕對(duì)路徑,使用相應(yīng)的長(zhǎng)文件名

ShortName
返回DOS風(fēng)格的8.3形式的文件夾名

ShortPath
返回DOS風(fēng)格的8.3形式的文件夾的絕對(duì)路徑

Size
返回包含在該文件夾里所有文件和子文件夾的大小

SubFolers
返回該文件夾內(nèi)包含的所有子文件夾對(duì)應(yīng)的Folders集合,包括隱藏文件夾和系統(tǒng)文件夾

Type
如果可能,返回一個(gè)文件夾的說(shuō)明字符串(例如,“Recycle Bin”)
(2)    Folder對(duì)象的方法
Folder對(duì)象提供一組可用于復(fù)制、刪除和移動(dòng)當(dāng)前文件夾的方法。這些方法的運(yùn)行方式與FileSystemObject對(duì)象的CopyFolder、DeleFolder和MoveFolder方法相同,但這些方法不要求source參數(shù),因?yàn)樵次募褪沁@個(gè)文件夾。這些方法及說(shuō)明如表5-10所示:
表5-10  Folder對(duì)象的方法及說(shuō)明
方 法
說(shuō) 明

Copy(destination,overwrite)
將這個(gè)文件夾及所有的內(nèi)容復(fù)制到destination指定的文件夾。如果destination的末尾是路徑分隔符(‘’),那么認(rèn)為destination是放置拷貝文件夾的一個(gè)文件夾。否則認(rèn)為destination是要?jiǎng)?chuàng)建的新文件夾的路徑和名字。如果目標(biāo)文件夾已經(jīng)存在且overwrite參數(shù)設(shè)置為False,將產(chǎn)生錯(cuò)誤,缺省的overwrite參數(shù)是True

Delete(force)
刪除文件夾及里面的所有內(nèi)容。如果可選的force參數(shù)設(shè)置為True,即使文件夾設(shè)置為只讀或含有只讀的文件,也將刪除該文件夾。缺省的force是False

Move(destination)
將文件夾及里面所有的內(nèi)容移動(dòng)到destination指定的文件夾。如果destination的末尾是路徑分隔符(‘’),那么認(rèn)為destination是放置移動(dòng)文件夾的一個(gè)文件夾。否則認(rèn)為destination是一個(gè)新的文件夾的路徑和名字。如果目標(biāo)文件夾已經(jīng)存在,則出錯(cuò)

CreateTextFile
(filename,overwrite,unicode)
用指定的文件名在文件夾內(nèi)創(chuàng)建一個(gè)新的文本文件,并且返回一個(gè)相應(yīng)的TextStream對(duì)象。如果可選的overwrite參數(shù)設(shè)置為True,將覆蓋任何已有的同名文件。缺省的overwrite參數(shù)是False。如果可選的unicode參數(shù)設(shè)置為True,文件的內(nèi)容將存儲(chǔ)為unicode文本。缺省的unicode是False

       在文件夾之間可以使用當(dāng)前文件夾的ParentFolder屬性,返回到父目錄。當(dāng)?shù)竭_(dá)一個(gè)文件夾時(shí),如果IsRootFolder屬性是True,就停下來(lái)。離開驅(qū)動(dòng)器的根目錄,沿目錄樹向下,可遍歷或訪問在Folders集合(由當(dāng)前文件夾的SubFolders屬性返回)內(nèi)的指定文件夾。
       下列程序遍歷了驅(qū)動(dòng)器C根目錄內(nèi)的所有文件夾,并顯示各個(gè)文件夾的有關(guān)信息。
       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程序在服務(wù)器上運(yùn)行時(shí)的結(jié)果如圖5-12所示。該頁(yè)面為folderscollection_vb.asp,來(lái)自本書提供的示例文件。

(3)    使用特殊文件夾
GetSpecialFolder是FileSystemObject對(duì)象的方法之一,它返回計(jì)算機(jī)上三個(gè)“特殊文件夾”對(duì)應(yīng)的Folder對(duì)象:
· WindowsFolder:%Windows%目錄,缺省為WinNT(或Windows,在非NT/2000計(jì)算機(jī)上)目錄。
· SystemFolder:%System%目錄,缺省為WinNTSystem32(或WindowsSystem,在非NT/2000計(jì)算機(jī)上)目錄。
· TemporaryFolder:%Temp%目錄,缺省為WinNTTemp(或WindowsTemp,在非NT/2000計(jì)算機(jī)上)目錄。
為得到對(duì)特殊文件夾的引用,我們提供相應(yīng)的預(yù)定義常數(shù)作為GetSpecialFolder方法的參數(shù):
' 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程序在服務(wù)器上運(yùn)行時(shí)的結(jié)果如圖5-13所示。該頁(yè)面名為specialfolder_vb.asp,來(lái)自本書提供的示例文件。

2.  File對(duì)象
File對(duì)象提供了對(duì)文件的屬性的訪問,通過它的方法能夠?qū)ξ募M(jìn)行操作。每個(gè)Folder對(duì)象提供了一個(gè)Files集合,包含文件夾中文件對(duì)應(yīng)的File對(duì)象。還可以直接地從FileSystemObject對(duì)象中通過使用GetFile方法得到一個(gè)File對(duì)象引用。
(1)      File對(duì)象的屬性
File對(duì)象有一系列的屬性,類似于Folder對(duì)象的屬性,如表5-11所示:
表5-11  File對(duì)象的屬性及說(shuō)明
屬 性
說(shuō) 明

Attributes
返回文件的屬性。可以是下列值中的一個(gè)或其組合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名稱)(9)、Directory(文件夾)(16)、Archive(32)、Alias(64)和Compressed(128)

DateCreated
返回該文件夾的創(chuàng)建日期和時(shí)間

DateLastAccessed
返回最后一次訪問該文件的日期和時(shí)間

DateLastModified
返回最后一次修改該文件的日期和時(shí)間

Drive
返回該文件所在的驅(qū)動(dòng)器的Drive對(duì)象

Name
設(shè)定或返回文件的名字

ParentFolder
返回該文件的父文件夾的Folder對(duì)象

Path
返回文件的絕對(duì)路徑,可使用長(zhǎng)文件名

ShortName
返回DOS風(fēng)格的8.3形式的文件名

ShortPath
返回DOS風(fēng)格的8.3形式的文件絕對(duì)路徑

Size
返回該文件的大小(字節(jié))

Type
如果可能,返回一個(gè)文件類型的說(shuō)明字符串(例如:“Text Document”表示.txt文件)

       (2)  File對(duì)象的方法
       同樣類似于Folder對(duì)象,F(xiàn)ile對(duì)象的方法允許復(fù)制、刪除以及移動(dòng)文件。它也有一個(gè)使用文本流打開文件的方法。File對(duì)象的方法及說(shuō)明如表5-12所示:
表5-12  File對(duì)象的方法及說(shuō)明
方 法
說(shuō) 明

Copy(destination,overwrite)
將這個(gè)文件復(fù)制到destination指定的文件夾。如果destination的末尾是路徑分隔符(‘’),那么認(rèn)為destination是放置拷貝文件的文件夾。否則認(rèn)為destination是要?jiǎng)?chuàng)建的新文件的路徑和名字。如果目標(biāo)文件已經(jīng)存在且overwrite參數(shù)設(shè)置為False,將產(chǎn)生錯(cuò)誤,缺省的overwrite參數(shù)是True

Delete(force)
刪除這個(gè)文件。如果可選的force參數(shù)設(shè)置為True,即使文件具有只讀屬性也會(huì)被刪除。缺省的force是False

Move(destination)
將文件移動(dòng)到destination指定的文件夾。如果destination的末尾是路徑分隔符(‘’),那么認(rèn)為destination是一文件夾。否則認(rèn)為destination是一個(gè)新的文件的路徑和名字。如果目標(biāo)文件夾已經(jīng)存在,則出錯(cuò)

CreateTextFile
(filename,overwrite,unicode)
用指定的文件名創(chuàng)建一個(gè)新的文本文件,并且返回一個(gè)相應(yīng)的TextStream對(duì)象。如果可選的overwrite參數(shù)設(shè)置為True,將覆蓋任何已有的同名文件。缺省的overwrite參數(shù)是False。如果可選的unicode參數(shù)設(shè)置為True,文件的內(nèi)容將存儲(chǔ)為unicode文本。缺省的unicode是False
OpenAsTextStream
(iomode,format)
打開指定文件并且返回一個(gè)TextStream對(duì)象,用于文件的讀、寫或追加。iomode參數(shù)指定了要求的訪問類型,允許值是ForReading(1) (缺省值)、ForWrite(2)、ForAppending(8)。format參數(shù)說(shuō)明了讀、寫文件的數(shù)據(jù)格式。允許值是TristateFalse(0)(缺省),說(shuō)明用ASCII數(shù)據(jù)格式;TristateTrue(-1)說(shuō)明用Unicode數(shù)據(jù)格式;TristateUseDefault(-2)說(shuō)明使用系統(tǒng)缺省格式

       因此給定一個(gè)File對(duì)象后,可以使用ParentFolder屬性得到包含該文件的Folder對(duì)象的引用,用來(lái)在文件系統(tǒng)中導(dǎo)航。甚至可以用Drive屬性獲得相應(yīng)的Drive對(duì)象的引用,并得到各種Folder對(duì)象以及所包含的File對(duì)象。
       另外,給定一個(gè)Folder對(duì)象以及對(duì)應(yīng)的Files集合后,可以通過遍歷該集合檢查這一文件夾中的每個(gè)文件。還可以使用File對(duì)象的各種方法以一定方式處理該文件,如復(fù)制、移動(dòng)或刪除。下面的代碼給出了C驅(qū)動(dòng)器的第一個(gè)文件夾的文件列表:
       ' 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
注意,不能使用數(shù)字索引來(lái)定位Folders或Files集合里的條目,因此必須使用For Each … Next語(yǔ)句遍歷該集合直到最初的條目,然后使用該條目的Name屬性。也不得不使用嵌套的圓括號(hào)強(qiáng)迫其作為值(字符串)傳送給該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>');
}
兩個(gè)程序的結(jié)果是相同的
    在C驅(qū)動(dòng)器上的第一個(gè)文件夾可能是CAConfig,缺省情況下該文件夾是空的。這種情況下,可先向該文件夾復(fù)制一些文件,完成實(shí)驗(yàn)以后再刪除這些文件。

 --------------------------------------------
QTP:FileSystemObject基礎(chǔ)知識(shí)
 在QTP測(cè)試中,比較本地的兩個(gè)文件是不是相同,需要使用VBScript的FileSystemObject對(duì)象,在此作簡(jiǎn)要的概述
一.基礎(chǔ)FileSystemObject
1.     創(chuàng)建 FileSystemObject 對(duì)象
Dim fso
Set fso = CreateObject(\"Scripting.FileSystemObject\")
  Scripting 是類型庫(kù)的名字,而 FileSystemObject 則是想要?jiǎng)?chuàng)建的對(duì)象的名字。
  要用 FileSystemObject (FSO) 對(duì)象模式來(lái)編程,則:使用 CreateObject 方法來(lái)創(chuàng)建 FileSystemObject 對(duì)象。 
  FSO 對(duì)象模式包含在 Scripting 類型庫(kù)中,該庫(kù)位于 Scrrun.dll 文件中。因而,要使用 FSO 對(duì)象模式,必須把 Scrrun.dll 放在 Web 服務(wù)器的適當(dāng)系統(tǒng)目錄中。
2.     使用方法:
  訪問現(xiàn)有驅(qū)動(dòng)器、文件和文件夾
GetDrive()、GetFolder()、GetFile()、CreateFolder()、CreateFile()、CreateTextFile ()、OpenTextFile()、FolderExists(url)、DeleteFolder(url)、MoveFolder(src,to)、FileExists(url)、CopyFile()、MoveFile()、DeleteFile()、
例如:
Dim fso, f1
Set fso = CreateObject(\"Scripting.FileSystemObject\")
Set f1 = fso.GetFile(\"c:\\test.txt\")
3.     訪問屬性:
Name、Path、Size、Type、DateLastModified(上一次修改的文件時(shí)間)
二.FSO的一些特殊功能
1.        GetSpecialFolder Method 返回特定的Windows文件夾的路徑:
  Windows安裝目錄;Windows系統(tǒng)目錄;Windows臨時(shí)目錄 
  FSO.GetSpecialFolder([0, 1, or 2])  
2.        GetTempName Method 返回一個(gè)隨機(jī)產(chǎn)生的文件或者目錄名字,用于存儲(chǔ)臨數(shù)據(jù)
3.        GetAbsolutePathName Method 返回文件夾的絕對(duì)路徑(類似于Server.MapPath)。
比如,F(xiàn)SO.GetAbsolutePathName(\"region\") 將返回類似于下面的結(jié)果:\"c:mydocsmyfolder egion\" 
4.        GetExtensionName Method 返回路徑中最后部分的擴(kuò)展名 (比如:FSO.GetExtensionName(\"c:docs est.txt\") 將返回txt) 
5.        GetBaseName and GetParentFolder Methods 返回路徑中最后部分的父文件夾 (比如:FSO.GetParentFolder (\"c:docsmydocs\") 將返回’docs’) 
6.        Drives Property 返回所有本地可用驅(qū)動(dòng)器的集合,用于建立資源瀏覽器樣的用戶接口。