directory search
JScript 用户指南 Jscript 基础 编写 JScript 代码 JScript 的变量 JScript 的数据类型 JScript 的运算符 控制程序的流程 JScript 函数 Jscript对象 创建自己的对象 内部对象 JScript 保留关键字 高级 JScript 创建高级对象 递归 变量范围 复制、传递和比较数据 使用数组 特殊字符 脚本问题解答 条件编译 条件编译变量 在浏览器中显示信息 使用消息框 语言参考 特性信息 Microsoft JScript 特性 - ECMA Microsoft JScript 特性 - 非-ECMA JScript 字母顺序的关健字列表 JScript 错误 JScript 运行时错误 JScript 语法错误 JScript 函数 GetObject 函数 ScriptEngine 函数 ScriptEngineBuildVersion 函数 ScriptEngineMajorVersion 函数 ScriptEngineMinorVersion 函数 JScript 方法 A-E abs 方法 acos 方法 anchor 方法 apply 方法 asin 方法 atan 方法 atan2 方法 atEnd 方法 big 方法 blink 方法 bold 方法 call 方法 ceil 方法 charAt 方法 charCodeAt 方法 compile 方法 concat 方法 (Array) concat 方法 (String) cos 方法 decodeURI 方法 decodeURIComponent 方法 dimensions 方法 encodeURI 方法 encodeURIComponent 方法 escape 方法 eval 方法 exec 方法 exp 方法 F-I fixed 方法 floor 方法 fontcolor 方法 fontsize 方法 fromCharCode 方法 getDate 方法 getDay 方法 getFullYear 方法 getHours 方法 getItem 方法 getMilliseconds 方法 getMinutes 方法 getMonth 方法 getSeconds 方法 getTime 方法 getTimezoneOffset 方法 getUTCDate 方法 getUTCDay 方法 getUTCFullYear 方法 getUTCHours 方法 getUTCMilliseconds 方法 getUTCMinutes 方法 getUTCMonth 方法 getUTCSeconds 方法 getVarDate 方法 getYear 方法 indexOf 方法 isFinite 方法 isNaN 方法 italics 方法 item 方法 J-R join 方法 lastIndexOf 方法 lbound 方法 link 方法 localeCompare 方法 log 方法 match 方法 max 方法 min 方法 moveFirst 方法 moveNext 方法 parse 方法 parseFloat 方法 parseInt 方法 pop 方法 pow 方法 push 方法 random 方法 replace 方法 reverse 方法 round 方法 S search 方法 setDate 方法 setFullYear 方法 setHours 方法 setMilliseconds 方法 setMinutes 方法 setMonth 方法 setSeconds 方法 setTime 方法 setUTCDate 方法 setUTCFullYear 方法 setUTCHours 方法 setUTCMilliseconds 方法 setUTCMinutes 方法 setUTCMonth 方法 setUTCSeconds 方法 setYear 方法 shift 方法 sin 方法 slice 方法 (Array) slice 方法 (String) small 方法 sort 方法 splice 方法 split 方法 sqrt 方法 strike 方法 sub 方法 substr 方法 substring 方法 sup 方法 T-Z tan 方法 test 方法 toArray 方法 toDateString 方法 toExponential 方法 toFixed 方法 toGMTString 方法 toLocaleDateString 方法 toLocaleLowerCase 方法 toLocaleString 方法 toLocaleTimeString 方法 toLocaleUpperCase 方法 toLowerCase 方法 toPrecision 方法 toString 方法 toTimeString 方法 toUpperCase 方法 toUTCString 方法 ubound 方法 unescape 方法 unshift 方法 UTC 方法 valueOf 方法 JScript 对象 ActiveXObject 对象 Array 对象 Boolean 对象 Date 对象 Enumerator 对象 Error 对象 Function 对象 Global 对象 Math 对象 Number 对象 Object 对象 RegExp 对象 正则表达式对象 String 对象 VBArray 对象 JScript 运算符 通用信息 运算符优先级 运算符总结 加法赋值运算符 (+=) 加法运算符 (+) 赋值运算符 (=) 按位“与”赋值运算符 (&=) 按位“与”运算符 (&) 按位左移运算符 (<<) 按位“非”运算符 (~) 按位“或”赋值运算符 (|=) 按位“或”运算符 (|) 按位右移运算符 (>>) 按位“异或”赋值运算符 (^=) 按位“异或”运算符 (^) 逗号运算符 ( 比较运算符 复合赋值运算符 条件(三目)运算符 (?:) delete 运算符 除法赋值运算符 (/=) 除法运算符 (/) in 运算符 递增 (++) 和递减 (--) 运算符 instanceof 运算符 左移赋值运算符 (<<=) 逻辑“与”运算符 (&&) 逻辑“非”运算符 (!) 逻辑“或”运算符 (||) 取余赋值运算符 (%=) 取余运算符 (%) 乘法赋值运算符 (*=) 乘法运算符 (*) new 运算符 右移赋值运算符 (>>=) 减法赋值运算符 (-=) 减法运算符 (-) typeof 运算符 无符号右移运算符 (>>>) 无符号右移赋值操作 (>>>=) void 运算符 JScript 属性 $1...$9 属性 arguments 属性 caller 属性 constructor 属性 description 属性 E 属性 global 属性 hasOwnProperty 方法 ignoreCase 属性 index 属性 Infinity 属性 input 属性($_) isProptotyeOf 方法 lastIndex 属性 length 属性 (Array) length 属性 (Function) length 属性 (String) LN10 属性 LN2 属性 LOG10E 属性 LOG2E 属性 MAX_VALUE 属性 message 属性 MIN_VALUE 属性 multiline 属性 name 属性 NaN 属性 NaN 属性 (Global) NEGATIVE_INFINITY 属性 number 属性 PI 属性 POSITIVE_INFINITY 属性 propertyIsEnumerable 属性 prototype 属性 source 属性 SQRT1_2 属性 SQRT2 属性 undefined 属性 JScript 语句 @cc_on 语句 @if 语句 @set 语句 break 语句 Comment 语句 continue 语句 do...while 语句 for 语句 for...in 语句 function 语句 if...else 语句 Labeled 语句 return 语句 switch 语句 this 语句 throw 语句 try...catch...finally 语句 var 语句 while 语句 with 语句 FileSystemObject 用户指南 FileSystemObject 对象模型 FileSystemObject 和 Scripting 运行时库参考的介绍 FileSystemObject 对象 设计 FileSystemObject 处理驱动器和文件夹 处理文件 FileSystemObject 示例代码 Scripting 运行时库参考 脚本运行时方法 Add 方法 (Dictionary) Add 方法 (Folders) BuildPath 方法 Close 方法 Copy 方法 CopyFile 方法 CopyFolder 方法 CreateFolder 方法 CreateTextFile 方法 Delete 方法 DeleteFile 方法 DeleteFolder 方法 DriveExists 方法 Exists 方法 FileExists 方法 FolderExists 方法 GetAbsolutePathName 方法 GetBaseName 方法 GetDrive 方法 GetDriveName 方法 GetExtensionName 方法 GetFile 方法 GetFileName 方法 getFileVersion 方法 GetFolder 方法 GetParentFolderName 方法 GetSpecialFolder 方法 GetTempName 方法 Items 方法 Keys 方法 Move 方法 MoveFile 方法 MoveFolder 方法 OpenAsTextStream 方法 OpenTextFile 方法 Read 方法 ReadAll 方法 ReadLine 方法 Remove 方法 RemoveAll 方法 Skip 方法 SkipLine 方法 Write 方法 WriteBlankLines 方法 WriteLine 方法 脚本运行时对象 Dictionary 对象 Drive 对象 Drives 集合 File 对象 Files 集合 FileSystemObject 对象 Folder 对象 Folders 集合 TextStream 对象 脚本运行时属性 AtEndOfLine 属性 AtEndOfStream 属性 Attributes 属性 AvailableSpace 属性 Column 属性 CompareMode 属性 Count 属性 DateCreated 属性 DateLastAccessed 属性 DateLastModified 属性 Drive 属性 DriveLetter 属性 Drives 属性 DriveType 属性 Files 属性 FileSystem 属性 FreeSpace 属性 IsReady 属性 IsRootFolder 属性 Item 属性 Key 属性 Line 属性 Name 属性 ParentFolder 属性 Path 属性 RootFolder 属性 SerialNumber 属性 ShareName 属性 ShortName 属性 ShortPath 属性 Size 属性 SubFolders 属性 TotalSize 属性 Type 属性 VolumeName 属性 正则表达式简介 正则表达式 早期起源 使用正则表达式 正则表达式语法 建立正则表达式 优先权顺序 普通字符 特殊字符 非打印字符 字符匹配 限定符 定位符 选择和编组 后向引用
characters


FileSystemObject 示例代码

在本节描述的示例代码,提供真实的例子来示范在 FileSystemObject 对象模式中可用的许多功能。该代码显示了如何一起使用对象模式的所有功能,以及如何在您自己的代码中有效地使用这些功能。

请注意,由于该代码是极一般的,所以要使该代码能够真正在您的机器上运行,可能需要一些其他代码和小小的变更。这些改变之所以必要,是因为在 Active Server Pages 和 Windows Scripting Host 之间,为输入和输出给用户采用了不同的方法。

要在 Active Server Pages 上运行该代码,则采取以下步骤:

创建一个标准的 Web 页,后缀名为 .asp。

把下面的示例代码复制到 &ltBODY>...</BODY> 标记之间的文件中。

把所有代码包装器到 <%...%> 标记内。

Option Explicit 语句从当前位置移动到 HTML 页的最顶部,甚至在 <HTML> 开始标记前。

把 <%...%> 标记放置在 Option Explicit 语句周围,以保证它在服务器端运行。

把下面的代码添加到示例代码末尾:

Sub Print(x)
   Response.Write "<PRE>&ltFONT FACE=""宋体"" SIZE=""1"">"
   Response.Write x
   Response.Write "</FONT></PRE>"
End Sub
Main

前面的代码增加一个将在服务器端运行,但在客户端显示结果的打印过程。要在 Windows Scripting Host 上运行该代码,则把下面的代码添加到示例代码的末尾:

Sub Print(x)
   WScript.Echo x
End Sub
Main

下面就是示例代码:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' FileSystemObject 示例代码
'Copyright 1998  Microsoft Corporation。   保留所有权利。 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 对于代码质量:
' 1) 下面的代码有许多字符串操作,用"&"运算符来把短字符串连接在一起。由于
'    字符串连接是费时的,所以这是一种低效率的写代码方法。无论如何,它是
'    一种非常好维护的写代码方法,并且在这儿使用了这种方法,因为该程序执行
'    大量的磁盘操作,而磁盘操作比连接字符串所需的内存操作要慢得多。
'    记住这是示范代码,而不是产品代码。
'
' 2) 使用了 "Option Explicit",因为访问声明过的变量,比访问未声明的变量要
'    稍微快一些。它还能阻止在代码中发生错误,例如,把 DriveTypeCDROM 误拼
'    成了 DriveTypeCDORM '
' 3) 为了使代码更可读,该代码中没有错误处理。虽然采取了防范措施,来保证代码
'    在普通情况下没有错误,但文件系统是不可预知的。在产品代码中,使用
'    On Error Resume Next  Err 对象来捕获可能发生的错误。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 一些容易取得的全局变量
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim TabStop
Dim NewLine

Const TestDrive = "C"
Const TestFilePath = "C:\Test"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'  Drive.DriveType 返回的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const DriveTypeRemovable = 1
Const DriveTypeFixed = 2
Const DriveTypeNetwork = 3
Const DriveTypeCDROM = 4
Const DriveTypeRAMDisk = 5

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'  File.Attributes 返回的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const FileAttrNormal  = 0
Const FileAttrReadOnly = 1
Const FileAttrHidden = 2
Const FileAttrSystem = 4
Const FileAttrVolume = 8
Const FileAttrDirectory = 16
Const FileAttrArchive = 32 
Const FileAttrAlias = 64
Const FileAttrCompressed = 128

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 用来打开文件的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const OpenFileForReading = 1 
Const OpenFileForWriting = 2 
Const OpenFileForAppending = 8 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShowDriveType
' 目的: 
' 生成一个字符串,来描述给定 Drive 对象的驱动器类型。
' 示范下面的内容
' - Drive.DriveType
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ShowDriveType(Drive)

   Dim S
   
   Select Case Drive.DriveType
   Case DriveTypeRemovable
      S = "Removable"
   Case DriveTypeFixed
      S = "Fixed"
   Case DriveTypeNetwork
      S = "Network"
   Case DriveTypeCDROM
      S = "CD-ROM"
   Case DriveTypeRAMDisk
      S = "RAM Disk"
   Case Else
      S = "Unknown"
   End Select

   ShowDriveType = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShowFileAttr
' 目的: 
' 生成一个字符串,来描述文件或文件夹的属性。
' 示范下面的内容
' - File.Attributes
' - Folder.Attributes
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function ShowFileAttr(File) ' File 可以是文件或文件夹

   Dim S
   Dim Attr
   
   Attr = File.Attributes

   If Attr = 0 Then
      ShowFileAttr = "Normal"
      Exit Function
   End If

   If Attr And FileAttrDirectory  Then S = S & "Directory "
   If Attr And FileAttrReadOnly   Then S = S & "Read-Only "
   If Attr And FileAttrHidden     Then S = S & "Hidden "
   If Attr And FileAttrSystem     Then S = S & "System "
   If Attr And FileAttrVolume     Then S = S & "Volume "
   If Attr And FileAttrArchive    Then S = S & "Archive "
   If Attr And FileAttrAlias      Then S = S & "Alias "
   If Attr And FileAttrCompressed Then S = S & "Compressed "

   ShowFileAttr = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateDriveInformation
' 目的: 
' 生成一个字符串,来描述可用驱动器的当前状态。
' 示范下面的内容
'  - FileSystemObject.Drives 
'  - Iterating the Drives collection
'  - Drives.Count
'  - Drive.AvailableSpace
'  - Drive.DriveLetter
'  - Drive.DriveType
'  - Drive.FileSystem
'  - Drive.FreeSpace
'  - Drive.IsReady
'  - Drive.Path
'  - Drive.SerialNumber
'  - Drive.ShareName
'  - Drive.TotalSize
'  - Drive.VolumeName
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateDriveInformation(FSO)

   Dim Drives
   Dim Drive
   Dim S

   Set Drives = FSO.Drives
   S = "Number of drives:" & 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, "-") & NewLine

   For Each Drive In Drives
      S = S & Drive.DriveLetter
      S = S & TabStop & Drive.Path
      S = S & TabStop & ShowDriveType(Drive)
      S = S & TabStop & Drive.IsReady

      If Drive.IsReady Then
         If DriveTypeNetwork = Drive.DriveType Then
            S = S & TabStop & Drive.ShareName 
         Else
            S = S & TabStop & Drive.VolumeName 
         End If    
         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)
      End If

      S = S & NewLine

   Next  

   GenerateDriveInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateFileInformation
' 目的: 
' 生成一个字符串,来描述文件的当前状态。
' 示范下面的内容
'  - File.Path
'  - File.Name
'  - File.Type
'  - File.DateCreated
'  - File.DateLastAccessed
'  - File.DateLastModified
'  - File.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateFileInformation(File)

   Dim S

   S = 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 & NewLine

   GenerateFileInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateFolderInformation
' 目的: 
' 生成一个字符串,来描述文件夹的当前状态。
' 示范下面的内容
'  - Folder.Path
'  - Folder.Name
'  - Folder.DateCreated
'  - Folder.DateLastAccessed
'  - Folder.DateLastModified
'  - Folder.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateFolderInformation(Folder)

   Dim S

   S = "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 & NewLine

   GenerateFolderInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateAllFolderInformation
' 目的: 
' 生成一个字符串,来描述一个文件夹和所有文件及子文件夹的当前状态。
' 示范下面的内容
'  - Folder.Path
'  - Folder.SubFolders
'  - Folders.Count
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateAllFolderInformation(Folder)

   Dim S
   Dim SubFolders
   Dim SubFolder
   Dim Files
   Dim File

   S = "Folder:" & TabStop & Folder.Path & NewLine & NewLine
   Set Files = Folder.Files

   If 1 = Files.Count Then
      S = S & "There is 1 file" & NewLine
   Else
      S = S & "There are " & Files.Count & " files" & NewLine
   End If

   If Files.Count <> 0 Then
      For Each File In Files
         S = S & GenerateFileInformation(File)
      Next
   End If

   Set SubFolders = Folder.SubFolders

   If 1 = SubFolders.Count Then
      S = S & NewLine & "There is 1 sub folder" & NewLine & NewLine
   Else
      S = S & NewLine & "There are " & SubFolders.Count & " sub folders" & NewLine & NewLine
   End If

   If SubFolders.Count <> 0 Then
      For Each SubFolder In SubFolders
         S = S & GenerateFolderInformation(SubFolder)
      Next
      S = S & NewLine
      For Each SubFolder In SubFolders
         S = S & GenerateAllFolderInformation(SubFolder)
      Next
   End If

   GenerateAllFolderInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateTestInformation
' 目的: 
' 生成一个字符串,来描述 C:\Test 文件夹和所有文件及子文件夹的当前状态。
' 示范下面的内容
'  - FileSystemObject.DriveExists
'  - FileSystemObject.FolderExists
'  - FileSystemObject.GetFolder
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateTestInformation(FSO)

   Dim TestFolder
   Dim S

   If Not FSO.DriveExists(TestDrive) Then Exit Function
   If Not FSO.FolderExists(TestFilePath) Then Exit Function

   Set TestFolder = FSO.GetFolder(TestFilePath)

   GenerateTestInformation = GenerateAllFolderInformation(TestFolder) 

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteTestDirectory
' 目的: 
' 清理 test 目录。
' 示范下面的内容
'  - FileSystemObject.GetFolder
'  - FileSystemObject.DeleteFile
'  - FileSystemObject.DeleteFolder
'  - Folder.Delete
'  - File.Delete
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub DeleteTestDirectory(FSO)

   Dim TestFolder
   Dim SubFolder
   Dim File
   
   ' 有两种方法可用来删除文件:

   FSO.DeleteFile(TestFilePath & "\Beatles\OctopusGarden.txt")

   Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
   File.Delete   

   ' 有两种方法可用来删除文件夹:
   FSO.DeleteFolder(TestFilePath & "\Beatles")
   FSO.DeleteFile(TestFilePath & "\ReadMe.txt")
   Set TestFolder = FSO.GetFolder(TestFilePath)
   TestFolder.Delete

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' CreateLyrics
' 目的: 
' 在文件夹中创建两个文本文件。
' 示范下面的内容
'  - FileSystemObject.CreateTextFile
'  - TextStream.WriteLine
'  - TextStream.Write
'  - TextStream.WriteBlankLines
'  - TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub CreateLyrics(Folder)

   Dim TextStream
   
   Set TextStream = Folder.CreateTextFile("OctopusGarden.txt")
   
   TextStream.Write("Octopus' Garden ") ' 请注意,该语句不添加换行到文件中。
   TextStream.WriteLine("(by Ringo Starr)")
   TextStream.WriteBlankLines(1)
   TextStream.WriteLine("I'd like to be under the sea in an octopus' garden in the shade,")
   TextStream.WriteLine("He'd let us in, knows where we've been -- in his octopus' garden in the shade.")
   TextStream.WriteBlankLines(2)
   
   TextStream.Close

   Set TextStream = Folder.CreateTextFile("BathroomWindow.txt")
   TextStream.WriteLine("She Came In Through The Bathroom Window (by Lennon/McCartney)")
   TextStream.WriteLine("")
   TextStream.WriteLine("She came in through the bathroom window protected by a silver spoon")
   TextStream.WriteLine("But now she sucks her thumb and wanders by the banks of her own lagoon")
   TextStream.WriteBlankLines(2)
   TextStream.Close

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetLyrics
' 目的: 
' 显示 lyrics 文件的内容。
' 示范下面的内容
'  - FileSystemObject.OpenTextFile
'  - FileSystemObject.GetFile
'  - TextStream.ReadAll
'  - TextStream.Close
'  - File.OpenAsTextStream
'  - TextStream.AtEndOfStream
'  - TextStream.ReadLine
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GetLyrics(FSO)

   Dim TextStream
   Dim S
   Dim File

   ' 有多种方法可用来打开一个文本文件,和多种方法来从文件读取数据。
   ' 这儿用了两种方法来打开文件和读取文件:

   Set TextStream = FSO.OpenTextFile(TestFilePath & "\Beatles\OctopusGarden.txt", OpenFileForReading)
   
   S = TextStream.ReadAll & NewLine & NewLine
   TextStream.Close

   Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
   Set TextStream = File.OpenAsTextStream(OpenFileForReading)
   Do    While Not TextStream.AtEndOfStream
      S = S & TextStream.ReadLine & NewLine
   Loop
   TextStream.Close

   GetLyrics = S
   
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' BuildTestDirectory
' 目的: 
' 创建一个目录分层结构来示范 FileSystemObject' 以这样的次序来创建分层结构:
' C:\Test
' C:\Test\ReadMe.txt
' C:\Test\Beatles
' C:\Test\Beatles\OctopusGarden.txt
' C:\Test\Beatles\BathroomWindow.txt
' 示范下面的内容
'  - FileSystemObject.DriveExists
'  - FileSystemObject.FolderExists
'  - FileSystemObject.CreateFolder
'  - FileSystemObject.CreateTextFile
'  - Folders.Add
'  - Folder.CreateTextFile
'  - TextStream.WriteLine
'  - TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function BuildTestDirectory(FSO)

   Dim TestFolder
   Dim SubFolders
   Dim SubFolder
   Dim TextStream
   ' 排除(a)驱动器不存在,或(b)要创建的目录已经存在的情况。

   If Not FSO.DriveExists(TestDrive) Then
      BuildTestDirectory = False
      Exit Function
   End If

   If FSO.FolderExists(TestFilePath) Then
      BuildTestDirectory = False
      Exit Function
   End If

   Set TestFolder = FSO.CreateFolder(TestFilePath)

   Set TextStream = FSO.CreateTextFile(TestFilePath & "\ReadMe.txt")
   TextStream.WriteLine("My song lyrics collection")
   TextStream.Close

   Set SubFolders = TestFolder.SubFolders
   Set SubFolder = SubFolders.Add("Beatles")
   CreateLyrics SubFolder   
   BuildTestDirectory = True

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 主程序
' 首先,它创建一个 test 目录,以及一些子文件夹和文件。 
' 然后,它转储有关可用磁盘驱动器和 test 目录的某些信息,
' 最后,清除 test 目录及其所有内容。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Main

   Dim FSO

   ' 设立全局变量。
   TabStop = Chr(9)
   NewLine = Chr(10)
   
   Set FSO = CreateObject("Scripting.FileSystemObject")

   If Not BuildTestDirectory(FSO) Then 
      Print "Test directory already exists or cannot be created.  Cannot continue."
      Exit Sub
   End If

   Print GenerateDriveInformation(FSO) & NewLine & NewLine
   Print GenerateTestInformation(FSO) & NewLine & NewLine
   Print GetLyrics(FSO) & NewLine & NewLine
   DeleteTestDirectory(FSO)

End Sub
Previous article: Next article: