在本节描述的示例代码,提供真实的例子来示范在FileSystemObject对象模式中可用的许多功能。该代码显示了如何一起使用对象模式的所有功能,以及如何在您自己的代码中有效地使用这些功能。
请注意,由于该代码是极一般的,所以要使该代码能够真正在您的机器上运行,可能需要一些其他代码和小小的变更。这些改变之所以必要,是因为在ActiveServerPages和WindowsScriptingHost之间,为输入和输出给用户采用了不同的方法。
要在ActiveServerPages上运行该代码,则采取以下步骤:
创建一个标准的Web页,后缀名为.asp。
把下面的示例代码复制到<BODY>...</BODY>标记之间的文件中。
把所有代码包装器到<%...%>标记内。
把OptionExplicit语句从当前位置移动到HTML页的最顶部,甚至在<HTML>开始标记前。
把<%...%>标记放置在OptionExplicit语句周围,以保证它在服务器端运行。
把下面的代码添加到示例代码末尾:
SubPrint(x)
Response.Write"<PRE><FONTFACE=""宋体""SIZE=""1"">"
Response.Writex
Response.Write"</FONT></PRE>"
EndSub
Main
前面的代码增加一个将在服务器端运行,但在客户端显示结果的打印过程。要在WindowsScriptingHost上运行该代码,则把下面的代码添加到示例代码的末尾:
SubPrint(x)
WScript.Echox
EndSub
Main
下面就是示例代码:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'FileSystemObject示例代码
'Copyright1998MicrosoftCorporation。保留所有权利。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''OptionExplicit''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''
'对于代码质量:
'1)下面的代码有许多字符串操作,用"&"运算符来把短字符串连接在一起。由于
'字符串连接是费时的,所以这是一种低效率的写代码方法。无论如何,它是
'一种非常好维护的写代码方法,并且在这儿使用了这种方法,因为该程序执行
'大量的磁盘操作,而磁盘操作比连接字符串所需的内存操作要慢得多。
'记住这是示范代码,而不是产品代码。
'
'2)使用了"OptionExplicit",因为访问声明过的变量,比访问未声明的变量要
'稍微快一些。它还能阻止在代码中发生错误,例如,把DriveTypeCDROM误拼
'成了DriveTypeCDORM。
'
'3)为了使代码更可读,该代码中没有错误处理。虽然采取了防范措施,来保证代码
'在普通情况下没有错误,但文件系统是不可预知的。在产品代码中,使用
'OnErrorResumeNext和Err对象来捕获可能发生的错误。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'一些容易取得的全局变量
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DimTabStop
DimNewLineConstTestDrive="C"
ConstTestFilePath="C:Test"'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''
'由Drive.DriveType返回的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ConstDriveTypeRemovable=1
ConstDriveTypeFixed=2
ConstDriveTypeNetwork=3
ConstDriveTypeCDROM=4
ConstDriveTypeRAMDisk=5''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''
'由File.Attributes返回的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ConstFileAttrNormal=0
ConstFileAttrReadOnly=1
ConstFileAttrHidden=2
ConstFileAttrSystem=4
ConstFileAttrVolume=8
ConstFileAttrDirectory=16
ConstFileAttrArchive=32
ConstFileAttrAlias=64
ConstFileAttrCompressed=128''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''
'用来打开文件的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ConstOpenFileForReading=1
ConstOpenFileForWriting=2
ConstOpenFileForAppending=8'''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''
'ShowDriveType
'目的:
'生成一个字符串,来描述给定Drive对象的驱动器类型。
'示范下面的内容
'-Drive.DriveType
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FunctionShowDriveType(Drive)DimS
SelectCaseDrive.DriveType
CaseDriveTypeRemovable
S="Removable"
CaseDriveTypeFixed
S="Fixed"
CaseDriveTypeNetwork
S="Network"
CaseDriveTypeCDROM
S="CD-ROM"
CaseDriveTypeRAMDisk
S="RAMDisk"
CaseElse
S="Unknown"
EndSelectShowDriveType=SEndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''
'ShowFileAttr
'目的:
'生成一个字符串,来描述文件或文件夹的属性。
'示范下面的内容
'-File.Attributes
'-Folder.Attributes
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''FunctionShowFileAttr(File)'File可以是文件或文件夹DimS
DimAttr
Attr=File.AttributesIfAttr=0Then
ShowFileAttr="Normal"
ExitFunction
EndIfIfAttrAndFileAttrDirectoryThenS=S&"Directory"
IfAttrAndFileAttrReadOnlyThenS=S&"Read-Only"
IfAttrAndFileAttrHiddenThenS=S&"Hidden"
IfAttrAndFileAttrSystemThenS=S&"System"
IfAttrAndFileAttrVolumeThenS=S&"Volume"
IfAttrAndFileAttrArchiveThenS=S&"Archive"
IfAttrAndFileAttrAliasThenS=S&"Alias"
IfAttrAndFileAttrCompressedThenS=S&"Compressed"ShowFileAttr=SEndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''
'GenerateDriveInformation
'目的:
'生成一个字符串,来描述可用驱动器的当前状态。
'示范下面的内容
'-FileSystemObject.Drives
'-IteratingtheDrivescollection
'-Drives.Count
'-Drive.AvailableSpace
'-Drive.DriveLetter
'-Drive.DriveType
'-Drive.FileSystem
'-Drive.FreeSpace
'-Drive.IsReady
'-Drive.Path
'-Drive.SerialNumber
'-Drive.ShareName
'-Drive.TotalSize
'-Drive.VolumeName
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''FunctionGenerateDriveInformation(FSO)DimDrives
DimDrive
DimSSetDrives=FSO.Drives
S="Numberofdrives:"&TabStop&Drives.Count&NewLine&NewLine'构造报告的第一行。
S=S&String(2,TabStop)&"Drive"
S=S&String(3,TabStop)&"File"
S=S&TabStop&"Total"
S=S&TabStop&"Free"
S=S&TabStop&"Available"
S=S&TabStop&"Serial"&NewLine'构造报告的第二行。
S=S&"Letter"
S=S&TabStop&"Path"
S=S&TabStop&"Type"
S=S&TabStop&"Ready?"
S=S&TabStop&"Name"
S=S&TabStop&"System"
S=S&TabStop&"Space"
S=S&TabStop&"Space"
S=S&TabStop&"Space"
S=S&TabStop&"Number"&NewLine'分隔行。
S=S&String(105,"-")&NewLineForEachDriveInDrives
S=S&Drive.DriveLetter
S=S&TabStop&Drive.Path
S=S&TabStop&ShowDriveType(Drive)
S=S&TabStop&Drive.IsReadyIfDrive.IsReadyThen
IfDriveTypeNetwork=Drive.DriveTypeThen
S=S&TabStop&Drive.ShareName
Else
S=S&TabStop&Drive.VolumeName
EndIf
S=S&TabStop&Drive.FileSystem
S=S&TabStop&Drive.TotalSize
S=S&TabStop&Drive.FreeSpace
S=S&TabStop&Drive.AvailableSpace
S=S&TabStop&Hex(Drive.SerialNumber)
EndIfS=S&NewLineNextGenerateDriveInformation=SEndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''
'GenerateFileInformation
'目的:
'生成一个字符串,来描述文件的当前状态。
'示范下面的内容
'-File.Path
'-File.Name
'-File.Type
'-File.DateCreated
'-File.DateLastAccessed
'-File.DateLastModified
'-File.Size
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''FunctionGenerateFileInformation(File)DimSS=NewLine&"Path:"&TabStop&File.Path
S=S&NewLine&"Name:"&TabStop&File.Name
S=S&NewLine&"Type:"&TabStop&File.Type
S=S&NewLine&"Attribs:"&TabStop&ShowFileAttr(File)
S=S&NewLine&"Created:"&TabStop&File.DateCreated
S=S&NewLine&"Accessed:"&TabStop&File.DateLastAccessed
S=S&NewLine&"Modified:"&TabStop&File.DateLastModified
S=S&NewLine&"Size"&TabStop&File.Size&NewLineGenerateFileInformation=SEndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'GenerateFolderInformation
'目的:
'生成一个字符串,来描述文件夹的当前状态。
'示范下面的内容
'-Folder.Path
'-Folder.Name
'-Folder.DateCreated
'-Folder.DateLastAccessed
'-Folder.DateLastModified
'-Folder.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''FunctionGenerateFolderInformation(Folder)DimSS="Path:"&TabStop&Folder.Path
S=S&NewLine&"Name:"&TabStop&Folder.Name
S=S&NewLine&"Attribs:"&TabStop&ShowFileAttr(Folder)
S=S&NewLine&"Created:"&TabStop&Folder.DateCreated
S=S&NewLine&"Accessed:"&TabStop&Folder.DateLastAccessed
S=S&NewLine&"Modified:"&TabStop&Folder.DateLastModified
S=S&NewLine&"Size:"&TabStop&Folder.Size&NewLineGenerateFolderInformation=SEndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'GenerateAllFolderInformation
'目的:
'生成一个字符串,来描述一个文件夹和所有文件及子文件夹的当前状态。
'示范下面的内容
'-Folder.Path
'-Folder.SubFolders
'-Folders.Count
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''FunctionGenerateAllFolderInformation(Folder)DimS
DimSubFolders
DimSubFolder
DimFiles
DimFileS="Folder:"&TabStop&Folder.Path&NewLine&NewLine
SetFiles=Folder.FilesIf1=Files.CountThen
S=S&"Thereis1file"&NewLine
Else
S=S&"Thereare"&Files.Count&"files"&NewLine
EndIfIfFiles.Count<>0Then
ForEachFileInFiles
S=S&GenerateFileInformation(File)
Next
EndIfSetSubFolders=Folder.SubFoldersIf1=SubFolders.CountThen
S=S&NewLine&"Thereis1subfolder"&NewLine&NewLine
Else
S=S&NewLine&"Thereare"&SubFolders.Count&"subfolders"&NewLine&NewLine
EndIfIfSubFolders.Count<>0Then
ForEachSubFolderInSubFolders
S=S&GenerateFolderInformation(SubFolder)
Next
S=S&NewLine
ForEachSubFolderInSubFolders
S=S&GenerateAllFolderInformation(SubFolder)
Next
EndIfGenerateAllFolderInformation=SEndFunction'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''
'GenerateTestInformation
'目的:
'生成一个字符串,来描述C:Test文件夹和所有文件及子文件夹的当前状态。
'示范下面的内容
'-FileSystemObject.DriveExists
'-FileSystemObject.FolderExists
'-FileSystemObject.GetFolder
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''FunctionGenerateTestInformation(FSO)DimTestFolder
DimSIfNotFSO.DriveExists(TestDrive)ThenExitFunction
IfNotFSO.FolderExists(TestFilePath)ThenExitFunctionSetTestFolder=FSO.GetFolder(TestFilePath)GenerateTestInformation=GenerateAllFolderInformation(TestFolder)EndFunction'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''
'DeleteTestDirectory
'目的:
'清理test目录。
'示范下面的内容
'-FileSystemObject.GetFolder
'-FileSystemObject.DeleteFile
'-FileSystemObject.DeleteFolder
'-Folder.Delete
'-File.Delete
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''SubDeleteTestDirectory(FSO)DimTestFolder
DimSubFolder
DimFile
'有两种方法可用来删除文件:FSO.DeleteFile(TestFilePath&"BeatlesOctopusGarden.txt")SetFile=FSO.GetFile(TestFilePath&"BeatlesBathroomWindow.txt")
File.Delete'有两种方法可用来删除文件夹:
FSO.DeleteFolder(TestFilePath&"Beatles")
FSO.DeleteFile(TestFilePath&"ReadMe.txt")
SetTestFolder=FSO.GetFolder(TestFilePath)
TestFolder.DeleteEndSub'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''
'CreateLyrics
'目的:
'在文件夹中创建两个文本文件。
'示范下面的内容
'-FileSystemObject.CreateTextFile
'-TextStream.WriteLine
'-TextStream.Write
'-TextStream.WriteBlankLines
'-TextStream.Close
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''SubCreateLyrics(Folder)DimTextStream
SetTextStream=Folder.CreateTextFile("OctopusGarden.txt")
TextStream.Write("Octopus'Garden")'请注意,该语句不添加换行到文件中。
TextStream.WriteLine("(byRingoStarr)")
TextStream.WriteBlankLines(1)
TextStream.WriteLine("I'dliketobeundertheseainanoctopus'gardenintheshade,")
TextStream.WriteLine("He'dletusin,knowswherewe'vebeen--inhisoctopus'gardenintheshade.")
TextStream.WriteBlankLines(2)
TextStream.CloseSetTextStream=Folder.CreateTextFile("BathroomWindow.txt")
TextStream.WriteLine("SheCameInThroughTheBathroomWindow(byLennon/McCartney)")
TextStream.WriteLine("")
TextStream.WriteLine("Shecameinthroughthebathroomwindowprotectedbyasilverspoon")
TextStream.WriteLine("Butnowshesucksherthumbandwandersbythebanksofherownlagoon")
TextStream.WriteBlankLines(2)
TextStream.CloseEndSub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'GetLyrics
'目的:
'显示lyrics文件的内容。
'示范下面的内容
'-FileSystemObject.OpenTextFile
'-FileSystemObject.GetFile
'-TextStream.ReadAll
'-TextStream.Close
'-File.OpenAsTextStream
'-TextStream.AtEndOfStream
'-TextStream.ReadLine
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''FunctionGetLyrics(FSO)DimTextStream
DimS
DimFile'有多种方法可用来打开一个文本文件,和多种方法来从文件读取数据。
'这儿用了两种方法来打开文件和读取文件:SetTextStream=FSO.OpenTextFile(TestFilePath&"BeatlesOctopusGarden.txt",OpenFileForReading)
S=TextStream.ReadAll&NewLine&NewLine
TextStream.CloseSetFile=FSO.GetFile(TestFilePath&"BeatlesBathroomWindow.txt")
SetTextStream=File.OpenAsTextStream(OpenFileForReading)
DoWhileNotTextStream.AtEndOfStream
S=S&TextStream.ReadLine&NewLine
Loop
TextStream.CloseGetLyrics=S
EndFunction'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''
'BuildTestDirectory
'目的:
'创建一个目录分层结构来示范FileSystemObject。
'以这样的次序来创建分层结构:
'C:Test
'C:TestReadMe.txt
'C:TestBeatles
'C:TestBeatlesOctopusGarden.txt
'C:TestBeatlesBathroomWindow.txt
'示范下面的内容
'-FileSystemObject.DriveExists
'-FileSystemObject.FolderExists
'-FileSystemObject.CreateFolder
'-FileSystemObject.CreateTextFile
'-Folders.Add
'-Folder.CreateTextFile
'-TextStream.WriteLine
'-TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''FunctionBuildTestDirectory(FSO)DimTestFolder
DimSubFolders
DimSubFolder
DimTextStream
'排除(a)驱动器不存在,或(b)要创建的目录已经存在的情况。IfNotFSO.DriveExists(TestDrive)Then
BuildTestDirectory=False
ExitFunction
EndIfIfFSO.FolderExists(TestFilePath)Then
BuildTestDirectory=False
ExitFunction
EndIfSetTestFolder=FSO.CreateFolder(TestFilePath)SetTextStream=FSO.CreateTextFile(TestFilePath&"ReadMe.txt")
TextStream.WriteLine("Mysonglyricscollection")
TextStream.CloseSetSubFolders=TestFolder.SubFolders
SetSubFolder=SubFolders.Add("Beatles")
CreateLyricsSubFolder
BuildTestDirectory=TrueEndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''
'主程序
'首先,它创建一个test目录,以及一些子文件夹和文件。
'然后,它转储有关可用磁盘驱动器和test目录的某些信息,
'最后,清除test目录及其所有内容。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''SubMainDimFSO'设立全局变量。
TabStop=Chr(9)
NewLine=Chr(10)
SetFSO=CreateObject("Scripting.FileSystemObject")IfNotBuildTestDirectory(FSO)Then
Print"Testdirectoryalreadyexistsorcannotbecreated.Cannotcontinue."
ExitSub
EndIfPrintGenerateDriveInformation(FSO)&NewLine&NewLine
PrintGenerateTestInformation(FSO)&NewLine&NewLine
PrintGetLyrics(FSO)&NewLine&NewLine
DeleteTestDirectory(FSO)EndSub