ASP 3.0高級(jí)編程(二10)
發(fā)表時(shí)間:2023-08-07 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]5.4.1 FileSystemObject對(duì)象成員概要 FileSystemObject對(duì)象提供一個(gè)屬性和一系列方法,可用它們來操縱FileSystemObject對(duì)象實(shí)現(xiàn)的一些從屬對(duì)...
5.4.1 FileSystemObject對(duì)象成員概要
FileSystemObject對(duì)象提供一個(gè)屬性和一系列方法,可用它們來操縱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ì)象的屬性及說明
屬 性
說 明
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)的方法及說明
方 法
說 明
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:\”及“\\machine\sharename”
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)的方法及說明
方 法
說 明
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:\docs\sales\”,而pathspec是“jan”,返回的字符是“c:\docs\sales\jan”。通配符、”..”和”\\”路徑操作符都是可以接受的
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所示:
方 法
說 明
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ù)說明對(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ì)象的簡單例子,它使用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所示:
圖5-9 驅(qū)動(dòng)器列表
這一頁面為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ì)象的屬性及說明
屬 性
說 明
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來代替
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)器字母來判別驅(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)前版本中)在類型庫中省略了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ù)該頁面。
當(dāng)在服務(wù)器上運(yùn)行以上VBScript代碼時(shí),運(yùn)行結(jié)果如圖5-10所示。這一頁面為drivescollection_vb.asp,來自本書提供的示例文件。
圖5-10 驅(qū)動(dòng)器詳細(xì)列表
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)系。
圖5-11 文件系統(tǒng)定位關(guān)系