Server 对象与其他对象的整合、应用
13-1 FSO文件对象组件
13-2 文本文件的读取与写入
13-3 CDO对象
13-1 FSO文件对象组件
ASP的File System Object对象可以对网页提供非常完善的文本文件的处理,但是这些文本文件的操作仅限于服务器端的文件处理,而不是指客户端的文件或文件夹。
13-1-1 FileSystemObject对象的基础
FSO是FileSystemObject对象模式的简称,这是一个ASP的外部对象。同时,只要用户的ASP是2.0以上的版本,在ASP编译器安装的过程中,都会自动安装此对象。FSO对象提供“取得服务器端的驱动器相关信息”、“在服务器端创建、移动、更改或者删除文件夹”,“文本文件内容的读取、写入或者创建”。
以目前的FSO版本而言,仅支持文本文件的读写,但是无法存取二进制的文件(例如图文件、执行文件、压缩文件等),FSO对象模式内含的对象,如表13-1所示。
表13-1 FSO对象模式的内含对象说明
对 象 名 称 |
功 能 简 述 |
FileSystemObject |
FileSystemObject对象模式的主对象,如果想处理服务器的驱动器、文件夹和文件,或是取得相关信息,请创建此对象 |
Drive |
驱动器对象,其属性和方法主要是取得驱动器信息,此处的驱动器不只是硬盘,CD-ROM光驱、RAM磁盘都可以 |
Folder |
文件夹对象,其属性和方法是取得文件夹信息,或是创建、删除和移动文件夹 |
File |
文件对象,其属性和方法能够取得文件信息和处理文件的移动、创建或删除文件 |
TextStream |
文字数据流对象,此对象用来读写文本文件 |
依据上述的各项FSO对象模式的说明,接着笔者以实例来说明如何创建FSO对象。程序代码如下所示:
u
u Dim 对象名称
u Set 对象名称 = Server.CreateObject( "Scripting.FileSystemObject" )
例如:定义一个名为“ObjFSO”的对象,在VBScript中,其程序代码如下所示:
u Dim ObjFSO
u Set ObjFSO = Server.CreateObject( "Scripting.FileSystemObject" )
在执行上述程序代码之后,ASP编译器将会创建一个名为ObjFSO的FileSystemObject对象。此时,FSO对象模式即具有取得服务器驱动器信息的Drive对象,创建、删除以及移动文件夹的Folder对象、文字处理的File对象。在一般的使用习惯上,在ASP程序中使用FSO对象的情况下,大多使用文本文件的读写处理方面。
有关File与TextStream对象的使用部分,在稍候的章节中将会详细叙述,在本节和下一节主要说明File和TextStream对象的使用。
13-1-2 创建文本文件
在创建文本文件之前,必须先请您参考FSO 对象提供了哪些关于文本文件操作的方法,这些方法如表13-2所示。
表13-2 FSO对象提供的关于文本文件的操作方法
对 象 名 称 |
功 能 简 述 |
CopyFile |
一个或多个文件的复制 |
CreateTextFile |
创建指定的文件名并返回一个 TextStream 对象,可以使用这个对象对文件进行读写 |
FileExists |
检查文件是否存在 |
OpenTextFile |
打开一个已经存在的文件,供ASP 程序读写或追加 |
根据上述FSO对象的方法所述,在创建文本文件的应用上,可以使用CreateTextFile方法创建一个文本文件。下列所述的程序代码即为 CreateText方法的范例:
u Set ObjTextStream = ObjFSO.CreateTextFile(fileName, [overwrite [,unicode]])
语法说明
· ObjTextStream:创建一个“ObjTextStream”数据流的对象名称。
· ObjFSO:前面小节中所创建的FSO对象名称。
· filename:所要创建文件的完整路径与名称。
· overwrite:是否允许覆盖已有文件;True表示允许覆盖原有的文件,False表示不允许覆盖原有的文件;系统默认值为False。
· unicode:指定文件是否以Unicode或ASCII文件格式创建,如果文件以Unicode格式创建,则值为True,如果以ASCII格式创建,则值为False,系统默认是ASCII格式。
在了解了FSO对象的方法之后,接着笔者以实例说明如何创建文本文件。
程序范例:Ch13-1.asp
在ASP程序中,使用FSO对象在执行的目录下创建文本文件TextFile.txt,分别显示了执行EX13-01.asp前后程序所在目录文件的变化情况。
程序内容
u 01: <!-- EX13-01.asp FSO 对象创建文本文件范例-->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-01.asp FSO 对象创建文本文件范例</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo
u 10: Dim fso
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: fso.CreateTextFile (filename)
u 20: Response.Write("文件路径与名称: <BR>" & filename & "<br>")
u 21: Set fso = Nothing
u 22: %>
u 23: </BODY>
u 24: </HTML>
程序说明
第11~15行:利用Request.ServerVariables("PATH_ TRANSLATED "),取出目前执行程序所在的实际路径及文件名称,并且逐字地检查是否为目录符号“\”。如果是“\”符号时,则记录目录符号所在的 I 值。
第16行:使用 Mid 函数,取出从执行程序所在的目录结构开始,到 I 值的文字内容,做为文件存放的路径。
第17行:设置文件的实际存放路径以及文件名称。
第18行:使用 Server.CreateObject创建 FSO对象模式。
第19行:使用FSO对象的CreateTextFile方法创建文本文件TextFile.txt。
第21行:释放创建的对象。
13-1-3 检查文件是否存在
如果用户希望创建文件前可以知道目标路径下是否存在相同的文件,需根据下列的语法进行文件是否存在的检查:
u 布尔代数 = FSO.FileExists(filename)
语法说明
· FSO.FileExists:使用FSO模型的 FileExists 方法。
· filename:文件的完整路径及文件名称。
· 布尔值:如果指定的文件存在,将返回True;反之,则返回False。
程序范例:EX13-2.asp
检查在范例程序执行的目录下,文件TextFile1.Txt是否存在。
两个具有不同结果的范例,所使用的程序如下所示:
程序内容
u 01: <!-- EX13-02.asp FSO 对象-检查文件是否存在 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-02.asp FSO 对象-检查文件是否存在</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo
u 10: Dim fso
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile2.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: Response.Write("文件路径与名称: <BR>" & filename & "<br><B>")
u 20: If fso.FileExists(filename) Then
u 21: Response.Write "检查结果:文件已经存在!"
u 22: Else
u 23: Response.Write "检查结果:文件不存在!"
u 24: End If
u 25: Set fso = Nothing
u 26: %>
u 27: </B>
u 28: </BODY>
u 29: </HTML>
程序说明
第18行:使用Server.CreateObject方法,创建FSO对象模式。
第20~24行:使用“If…Then…Else”条件语句,利用FSO模型的FileExists方法检查文件是否存在并返回结果。
13-1-4 删除文件
在FSO对象模式中,也提供了删除文件(DeleteFile)的方法;以下是DeleteFile的语法:
u fso.DeleteFile (filename)
语法说明
· fso.DeleteFile:执行FSO对象模式的DeleteFile方法。
· filename:文件的完整路径及名称。
程序范例:Ch13-3.asp
使用ASP程序,将先前范例程序所创建的TextFile1.txt删除,可以得知先前范例程序所创建的TextFile.txt已经被删除。
程序内容
u 01: <!-- EX13-03.asp FSO 对象-删除文件 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-03.asp FSO 对象-删除文件</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo
u 10: Dim fso
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = Server.CreateObject("Scripting.FileSystemObject")
u 19:
u 20: Response.Write ("文件路径与名称: <BR>" & filename & "<br>")
u 21: If fso.FileExists(filename) then
u 22: fso.DeleteFile (filename)
u 23: Response.Write ("<B>指定的文件已经删除!</B>")
u 24: Else
u 25: Response.Write ("<B>指定的文件不存在!</B>")
u 26:
u 27: End If
u 28: Set fso = Nothing
u 29: %>
u 30: </BODY>
u 31: </HTML>
程序说明
第 18 行:使用Server.CreateObject方法,创建FSO对象模式。
第 21 行:判断指定的文件是否存在。
第 22 行:指定的文件如果存在,则执行FSO对象模式的DeleteFile方法。
13-1-5 取得文件属性
在FSO对象模式中,不仅仅提供文件的操作方法供ASP过程调用;同时,另外也提供了File对象,供ASP程序取得文件的相关属性。以下是File对象的语法:
u Set 对象模板 = fso.GetFile(filename)
语法说明
对象模板:由于已经使用了FSO对象名称,依据ASP的规定,这个对象模板的名称,必须先定义后使用。
· fso.GetFile:使用FSO对象模式的GetFile方法。
· filename:文件的完整路径及名称。
同时,定义了对象模板后的File对象,具有下列属性及方法。
表13-3 File对象的属性
属 性 |
功 能 简 述 |
|
Attributes |
设置或返回文件或文件夹的属性,可读写或只读,视其属性而定 |
|
DateCreated |
返回指定文件或文件夹所创建的日期和时间,只读 |
|
DateLastAccessed |
返回指定文件或文件夹最后存取的日期和时间,只读 |
|
DateLastModified |
返回指定文件或文件夹最后修改的日期和时间,只读 |
|
Drive |
返回指定文件或文件夹所在的驱动器的驱动器号,只读 |
|
Name |
设置或返回指定文件或文件夹的名称,可读写 |
|
ParentFolder |
返回文件夹对象对指定文件或文件夹的父文件夹,只读 |
|
Path |
返回指定文件、文件夹,或驱动器的路径 |
|
ShortName |
返回符合传统 8.3文件命名约定转换的短文件名 |
|
ShortPath |
返回符合传统 8.3命名约定转换的短路径名 | |
Size |
返回指定文件的大小,以字节数计。返回文件夹内所有文件及子文件夹的大小,以字节数计 | |
Type |
返回文件或文件夹的类型信息。例如,对于扩展名为 .TXT 的文件,返回“Text Document” |
表13-4 File对象的方法
方 法 |
功 能 简 述 |
Copy |
从某个位置复制指定的文件或文件夹到其他位置 |
Delete |
删除指定文件或文件夹 |
Move |
将指定的文件或文件夹从某位置移动到另一位置 |
OpenAsTextStream |
打开指定文件,并返回一个TextStream对象,以用来读、写、或追加该文件 |
程序范例:Ch13-4.asp
在ASP程序中,使用FSO对象模式的File对象,取得指定文件的相关属性信息。
程序内容
u 01: <!-- EX13-04.asp FSO 对象模式 File 对象-文件属性 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-04.asp FSO 对象模式 File 对象-文件属性</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo
u 10: Dim fso, fs
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: Set fs = fso.GetFile(filename)
u 20: Response.Write "文件名 :" & fs.Name & "<br>"
u 21: Response.Write "文件名(8.3) :" & fs.ShortName & "<br>"
u 22: Response.Write "文件类型 :" & fs.Type & "<br>"
u 23: Response.Write "文件路径 :" & fs.Path & "<br>"
u 24: Response.Write "文件路径(8.3) :" & fs.ShortPath & "<br>"
u 25: Response.Write "上层目录 :" & fs.ParentFolder & "<br>"
u 26: Response.Write "文件所在盘符 :" & fs.Drive & "<br>"
u 27: Response.Write "文件属性 : " & fs.Attributes & "<br>"
u 28: Response.Write "创建时间 :" & fs.DateCreated & "<br>"
u 29: Response.Write "存取时间 :" & fs.DateLastAccessed & "<br>"
u 30: Response.Write "修改时间 :" & fs.DateLastModified & "<br>"
u 31: Response.Write "文件大小 :" & fs.Size & " Byte<br>"
u 32: Set fso = Nothing
u 33: %>
u 34: </BODY>
u 35: </HTML>
程序说明
第 18 行:使用Server.CreateObject方法,创建FSO对象模式。
第 19 行:取得文件的File对象。
第20~31行:显示文件的相关信息(使用File对象的属性)。
以下是File对象Attributes属性数值所代表的意义。
表13-5 File对象Attributes属性值及意义
常 数 |
值 |
说 明 |
|
0 |
普通文件,没有设置任何属性 |
ReadOnly |
1 |
只读文件,属性为可读写 |
Hidden |
2 |
隐藏文件,属性为可读写 |
System |
4 |
系统文件,属性为可读写 |
Volume |
8 |
磁盘驱动器卷标,属性为只读 |
Directory |
16 |
文件夹或目录,属性为只读 |
Archive |
32 |
上次备份后已更改的文件,属性为可读写 |
Alias |
64 |
链接或快捷方式,属性为只读 |
Compressed |
128 |
压缩文件,属性为只读 |
13-2 文本文件的读取与写入
在上一节,我们提到了有关FSO对象模式的创建方式、文件是否存在的检查、文件的删除以及文件属性的读取等,这些都属于文件的基本操作与处理。接下来在本节中,将介绍如何对一个已经创建的文本文件进行读写操作,而这些都是通过FSO对象模式中的“TextStream”来完成的。
13-2-1 如何读取与写入文本文件
FSO对象模式在处理TextStream对象所读取的数据时,采用称为“数据流”的方式读取文本文件的数据。“数据流”的概念其实非常简单,“流”可以视同“流水”,取其“一去不复返”。对于文字资料的数据流而言,它仅仅可以提供文件的顺序读写,指针一旦向下移位之后,将无法返回。读写的步骤如下所示:
(1)创建FileSystemObject对象
如同上一节的文件操作一样,文本文件的读写也需要创建FSO对象,语法如下所示:
u Set fso=Server.CreateObject("Scripting.FileSystemObject")
(2)打开文本文件
FSO对象模式创建完成之后,即使用FSO对象模式的OpenTextFile方法打开文本文件,其语法如下所示:
u ObjectName.OpenTextFile(filename[, iomode[, create[, format]]])
语法说明
· ObjectName:FSO对象模式的对象名称。
· filename:文件的完整路径与名称。
· iomode:可选,输入/输出模式,可以是下列三个常数之一:ForReading,ForWriting或ForAppending。iomode自变量可以是下列其中一个设置。
表13-6 iomode自变量设置
常 数 |
值 |
说 明 |
ForReading |
1 |
以只读模式打开文件,不能对此文件进行写操作 |
ForWriting |
2 |
以只写方式打开文件,不能对此文件进行读操作 |
ForAppending |
8 |
打开文件并在文件末尾进行写操作 |
· create:可选。布尔值,当指定的filename不存在时,是否要创建新文件。允许创建新文件时,此值为True,否则为False。如果予于省略,则不创建新文件。
· format:可选。这是三个Tristate值之一,指出以何种格式打开文件。如果省略,则会以ASCII格式打开。format自变量可以是下列其中一个设置。
表13-7 format自变量的设置
值 |
描 述 |
TristateTrue |
以 Unicode 格式打开文件 |
TristateFalse |
以 ASCII 格式打开文件 |
TristateUseDefault |
使用系统默认值打开文件 |
(3)执行文本文件的读写
在创建的文本文件打开之后,必须先利用上一个步骤中的“iomode”自变量,确认文件的打开状态;以下是文本文件写入(Write方法)的语法:
u ObjectName.WriteMethod(string)
语法说明
· ObjectName:必选。这是TextStream对象的名称。
· WriteMethod:写入的方式,如表13-8所示。
表13-8 写入方式
写入方法 |
说 明 |
Write(string) |
写入指定字符串 |
WriteLine(string) |
写入指定字符串和新行字符 |
WriteBlankLines(lines) |
写入指定数目的新行字符 |
· String:必选。要写入文件的文本。
· lines:要向文件写入的新行字符数目。
以下是文本文件读取(Read方法)的语法:
u ObjectName.Read(characters)
u ObjectName.Readline
u ObjectName.Readall
u ObjectName.Skip(Number)
u ObjectName.SkipLine
语法说明
· ObjectName:必选。这是TextStream对象的名称。
· Read(characters):从文件中读取的字符数。
· ReadLine:从TextStream文件中读取一整行字符(最多到换行字符但不包括换行字符),并返回结果字符串。
· ReadAll:读入全部TextStream文件,并返回结果字符串。
· Skip(Number):在读取TextStream文件时,跳过指定数目的字符。
· SkipLine:跳过下一行继续读取TextStream文件。
如果使用ObjectName.ReadLine方法,则必须要用“Do…Loop”条件语句及属性的配合,其程序代码如下所示:
u Do While Not ObjectName.AtEndOfStream
u strLine = ObjectName.ReadLine
u
文本文件相关的读取属性,如表13-9所示。
表13-9 文本文件相关的读取属性
读取属性 |
说 明 |
AtEndOfStream |
文件指针是否到达文件末 |
Line |
目前文件指针所在行号 |
(4)关闭文本文件
在处理完文本文件的读写后,务必关闭文件并同时释放对象,如下所示:
u ObjectName.Close
u Set ObjectName = Nothing
u Set fso = Nothing
13-2-2 写入文本文件
TextStream对象有许多写入文本文件的方法。虽然Write方法可以将字符串写入文件中,但在执行写入的过程中,却不会自动地换行,程序代码如下所示:
u ObjnNme.Write(string)
程序范例:Ch13-5.asp
在ASP程序中使用TextStream对象的Write方法写入两行字符到文件TextFile1.txt,此文件并不存在,所以在打开时一并创建。
从上述EX13-05.asp程序执行前后文件TextFile.txt内容的变化,即可了解是否确实执行文件写入的操作;同时,在这个范例中也可以清楚地见到,Write方法不具有换行的功能。
程序内容
u 01: <!-- EX13-05.asp FSO 对象模式 Write 对象-写入范例 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-05.asp FSO 对象模式 Write 对象-写入范例</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo, Strings
u 10: Dim fso, fs
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: Const ForReading = 1, ForWriting = 2, ForAppending = 8
u 20: Set fs = fso.OpenTextFile(filename, ForWriting, True)
u 21: Response.Write "文本文件的写入:<Br>"
u 22: Strings = "Hello 大家好!"
u 23: fs.Write Strings
u 24: Response.Write "写入的文字:" & Strings & "<Br>"
u 25: Strings = "我是陈峰棋"
u 26: fs.Write Strings
u 27: Response.Write "写入的文字:" & Strings & "<Br>"
u 28: fs.Close
u 29: Set fs = Nothing
u 30: Set fso = Nothing
u 31: %>
u 32: </BODY>
u 33: </HTML>
程序说明
第19行:设置写入常数的名称与数值。
第20行:设置fs对象为FSO对象的OpenTextFile方法,并且设置执行的操作为写入。
第21~27行:分别使用Write方法写入两个字符串。
第28行:关闭文件。
13-2-3 写入空白行到文本文件
Write对象在写入文本文件的同时,并不具有换行的动作,可以使用写入空白行的方式,强迫换行,程序代码如下所示:
u ObjectName.WriteBlankLines(2)
程序范例:Ch13-6.asp
在ASP程序中,使用TextStream对象的WriteBlankLines方法,将空白行写入到文本文件,强迫Write方法换行。显示的结果与EX13-05.asp完全一样(只有浏览器的Title部分不同而已),但实际上,在文本文件中已经加入了空白行。
由于笔者在程序中写入了空白行,因此在文本文件的实际内容中,可以见到Write方法已经被强迫换行了。
程序内容
u 01: <!-- EX13-06.asp FSO 对象模式 WriteBlankLines 对象-执行范例 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-06.asp FSO 对象模式 WriteBlankLines 对象-执行范例</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo, Strings
u 10: Dim fso, fs
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: Const ForReading = 1, ForWriting = 2, ForAppending = 8
u 20: Set fs = fso.OpenTextFile(filename, ForWriting, True)
u 21: Response.Write "文本文件的写入:<Br>"
u 22: Strings = "Hello 大家好!"
u 23: fs.Write Strings
u 24: fs.WriteBlankLines(1)
u 25: Response.Write "写入的文字:" & Strings & "<Br>"
u 26: Strings = "我是陈峰棋"
u 27: fs.Write Strings
u 28: Response.Write "写入的文字:" & Strings & "<Br>"
u 29: fs.Close
u 30: Set fs = Nothing
u 31: Set fso = Nothing
u 32: %>
u 33: </BODY>
u 34: </HTML>
程序说明
第24行:使用WriteBlankLines方法写入一空白行。
由于其他部分与EX13-05.asp完全相同,因此笔者在此不多做说明。
13-2-4 写入一行字符串到文本文件
WriteBlankLines方法虽然为Write方法加入换行的动作,但在实际应用中,可以使用WriteLine方法达到写入字符串并且换行的动作;范例程序代码如下所示:
u ObjectName.WriteLine(string)
程序范例:Ch13-2-4.asp
在ASP程序中,使用TextStream对象的WriteLine方法,将两行字符串写入文本文件TextFile.txt中。在打开文本文件TextFile.txt之后,可以见到其执行的效果就如同EX13-06.asp一样,但却少用了一行fs.WriteBlankLines命令。
上述看到写入的两个字符串都自成一行。
程序内容
u 01: <!-- EX13-07.asp FSO 对象模式 WriteLine 方法-执行范例 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-07.asp FSO 对象模式 WriteLine 方法-执行范例</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo, Strings
u 10: Dim fso, fs
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: Const ForReading = 1, ForWriting = 2, ForAppending = 8
u 20: Set fs = fso.OpenTextFile(filename, ForWriting, True)
u 21: Response.Write "文本文件的写入:<Br>"
u 22: Strings = "Hello 大家好!"
u 23: fs.WriteLine Strings
u 24: Response.Write "写入的文字:" & Strings & "<Br>"
u 25: Strings = "我是陈峰棋"
u 26: fs.WriteLine Strings
u 27: Response.Write "写入的文字:" & Strings & "<Br>"
u 28: fs.Close
u 29: Set fs = Nothing
u 30: Set fso = Nothing
u 31: %>
u 32: </BODY>
u 33: </HTML>
程序说明
第26行:使用WriteLine方法,将字符串写入文本文件TextFile.txt中。
第27行:使用WriteLine方法,将字符串写入文本文件TextFile.txt中。
由于其他部分与前面的范例程序完全相同,因此笔者在此不多做说明。
13-2-5 添加文字到文本文件
在上述各种写入的范例中,笔者都是使用ForWriting自变量,执行文字的写入操作。但是在使用这种写入方式时,会将文本文件的内容完全清除,然后再写入新的文字。如果只是想将新的文字加到原有的文件中,但是又想保留原有的文字时,可以使用ForAppending自变量来达成这个目的。
程序范例:Ch13-08.asp
在原有的TextFile.txt文本文件中,使用TextStream对象的ForAppending自变量,将新的字符串加入到原有的文本文件中。显示已经将新增的文字写入文件。使用“记事本”打开test.txt文件,可以看到目前的文件内容。
在EX13-08.asp程序执行完成之后,可以从上面的图例中清楚地看到,原有的文字内容依然存在,本范例程序只是将字符串添加到文件末尾。
程序内容
u 01: <!-- EX13-08.asp FSO 对象模式 ForAppending 自变量-执行范例 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-08.asp FSO 对象模式 ForAppending 自变量-执行范例</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo, Strings
u 10: Dim fso, fs
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Set fso = CreateObject("Scripting.FileSystemObject")
u 19: Const ForReading = 1, ForWriting = 2, ForAppending = 8
u 20: Set fs = fso.OpenTextFile(filename, ForAppending, True)
u 21: Response.Write "文本文件的写入:<Br>"
u 22: Strings = "这是 ForAppending 自变量的执行范例"
u 23: fs.WriteLine Strings
u 24: Response.Write "写入的文字:" & Strings & "<Br>"
u 25: fs.Close
u 26: Set fs = Nothing
u 27: Set fso = Nothing
u 28: %>
u 29: </BODY>
u 30: </HTML>
程序说明
第20行:设置文件的写入动作使用了ForAppending自变量。
13-2-6 读取文本文件的字符/一行文字
在前面的几种范例中,都是使用写入文本文件作为范例,现在介绍如何读出文本文件的内容。文本文件的读取正如前面所介绍的,共有下列三种读取方式:
· 一行一行读取。
· 逐字读取。
· 整个文件读取。
u ObjectName.OpentextFile(filename, ForReading, [create[,format]])
在Read范例中,将简要说明并显示重要的范例执行结果。
下面,笔者提供几种读取文字内容的范例。
范例程序:EX13-09.asp
读取TextFile.txt文件中开头的5个字符,用户可以参考EX13-10.asp范例,修改第21行语句为:
u vars = fs.Read (5)
例如:希望读取TextFile.txt文件中一整行字符,可以使用下列范例程序代码:
u vars = fs.ReadLine
范例程序:EX13-10.asp
程序内容
u 01: <!-- EX13-10.asp FSO 对象模式 ReadLine -执行范例 -->
u 02: <HTML>
u 03: <HEAD>
u 04: <
u 05: <TITLE>EX13-10.asp FSO 对象模式 ReadLine -执行范例</TITLE>
u 06: </HEAD>
u 07: <BODY>
u 08: <%
u 09: Dim Location, PathInfo, Strings
u 10: Dim fso, fs
u 11: For I = 1 To Len(Request.ServerVariables("PATH_TRANSLATED"))
u 12: If Mid(Request.ServerVariables("PATH_TRANSLATED"), I, 1) = "\" Then
u 13: Location = I
u 14: End if
u 15: Next
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Const ForReading = 1
u 19: Set fso = CreateObject("Scripting.FileSystemObject")
u 20: Set fs = fso.OpenTextFile(filename, ForReading)
u 21: vars = fs.ReadLine
u 22: Response.Write "打开的文件为:'" & filename & "'<Br>"
u 23: Response.Write "读取的文字为:'" & vars & "'"
u 24: fs.Close
u 25: Set fs = Nothing
u 26: Set fso = Nothing
u 27: %>
u 28: </BODY>
u 29: </HTML>
程序说明
第21行:整行文字的读取方式。
同样,如果仅仅读取五个字符时,则应该将“vars = fs.ReadLine”改为“vars = fs.Read(5)”。
13-2-7 读取整个文本文件
读取整个文本文件,共有两种方法可供选择。这两种方法如下所示:
· ReadLine:一行一行地读取,一直到文件的结尾,需要配合AtEndOfStream属性使用。
· ReadAll:读取整个文本文件的内容。
下面将分别简述这两种方法的使用。
范例程序:EX13-11.asp
使用ReadLine方法并搭配“Do…Loop”循环、AtEndOfStream属性,读取整个TextFile.txt文件。
程序内容
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Const ForReading = 1
u 19: Set fso = CreateObject("Scripting.FileSystemObject")
u 20: Set fs = fso.OpenTextFile(filename, ForReading)
u 21: Response.Write "打开的文件为:'" & filename & "'<Br>"
u 22: Response.Write "读取的文字为:<Br>"
u 23: Do While Not fs.AtEndOfStream
u 24: vars = fs.ReadLine
u 25: Response.Write vars & "<br>"
u 26:
程序说明
第23~26行:使用“Do…Loop”循环控制的方式,判断是否已经到达TextStream的末端。
第24行:使用ReadLine读出的整行数据存到vars变量中。
范例程序:Ex13-12.asp
使用ReadAll方法并搭配“Do…Loop”循环、AtEndOfStream属性的方式,读取整个TextFile.txt文件的内容。
程序内容
u 16: PathInfo = Mid(Request.ServerVariables("PATH_TRANSLATED") , 1, Location)
u 17: filename = PathInfo & "TextFile1.txt"
u 18: Const ForReading = 1
u 19: Set fso = CreateObject("Scripting.FileSystemObject")
u 20: Set fs = fso.OpenTextFile(filename, ForReading)
u 21: Response.Write "打开的文件为:'" & filename & "'<Br>"
u 22: Response.Write "读取的文字为:<Br>"
u 23: vars = fs.Readall
u 24: vars = Replace(vars , Chr(10) , "<br>")
u 25: Response.Write vars & "<br>"
u 26: fs.Close
程序说明
第23行:使用ReadAll方法读取整个文件的内容字符串。
第24行:在文本文件中,使用“Chr(10)”作为换行指令,但在Web Page上却无法支持。因此,使用Replace函数,将所有的“Chr(10)”字符替换成网页换行标记“<br>”。
第25行:显示文本文件的实际内容。
13-3 CDO对象
CDO外部对象在Windows NT 4.0的系统中,是由Option Pack所提供的“SMTP Service”。由于“SMTP Service”属于IIS的子组件,因此,用户在安装Option Pack过程中,必须指定安装“SMTP Service”。同样,在安装Windows 2000操作系统的过程中,安装IIS 5.0部分时同样也会有这个选项存在。
若在安装操作系统的过程中忽略了此选项,可以在“开始”|“设置”|“控制面板”|“添加/删除程序”|“添加/删除 Windows 组件”的选项中,找到这个安装选项。以下是在Windows 2000操作系统中,如何加入“SMTP Service”的简单设置范例。以下是安装步骤:
(1)打开“控制面板”中的“添加/删除程序”
(2)打开“添加/删除 Windows 组件”的选项。
选中“Internet信息服务(IIS)”组件,单击“详细信息”按钮后,选中“SMTP Service”IIS子组件即可。
13-3-1 SMTP环境的创建与使用
如果SMTP Service已经安装完成,即可进行IIS内的SMTP Service的设置工作。SMTP服务既然属于IIS的子组件,当然是从Internet 服务管理器(MMC)程序中进行设置的。以下即为设置SMTP服务的步骤:
(1)首先请读者打开MMC。
(2)点选树状目录下的“默认 SMTP 虚拟服务器”,再选择右方“名称”下的“域”,右击即可打开快捷菜单。
(3)接着可见指定域的类型画面。
在这个画面中共有两种选项,它们的功能分别如下所述:
· 远程:这个选项提供的是在Internet上提供邮件服务的主机名称。也就是说,将别的邮件主机作为用户的信件转发主机。
· 别名:所指的是,如果邮件地址属于这个域,也一样可以寄到SMTP虚拟服务器。
(4)在选择“远程”选项后,请在“名称”文本框中输入如下所示的“Internet主机名称”。
单击“完成”按钮即可完成域名的设置。
下面就来测试SMTP服务是否可以正常运行。
13-3-2 实际测试
既然要使用ASP测试SMTP服务是否能正常运行,当然免不了一定要编写网页程序,以下即为通过CDO对象传送电子邮件的范例程序内容与说明。
范例程序:EX-13A.htm
首先,笔者设计了一个可供输入“发件人”、“收件人”、“附件”、“主题”以及“邮件内容”的输入窗口。
程序内容
u 01: <HTML>
u 02: <HEAD>
u 03: <
u 04: <TITLE></TITLE>
u 05: </HEAD>
u 06: <BODY>
u 07: <Center><Font Size=6>CDO 电子邮件发送测试</Font></Center>
u 08: <Hr Width="80%" Align="Center">
u 09: <FORM Method="Post" Action="EX13-13B.asp">
u 10: <Table Border=1>
u 11: <Tr>
u 12: <Td>发件人:</Td>
u 13: <Td><Input Type="Text" Name="Sender" Value=""></Td>
u 14: </Tr>
u 15: <Tr>
u 16: <Td>收件人:</Td>
u 17: <Td><Input Type="text" Name="Recipient" Value=""></Td>
u 18: </Tr>
u 19: <Tr>
u 20: <Td>副本:</Td>
u 21: <Td><Input Type="Text" Name="CC" Value=""></Td>
u 22: </Tr>
u 23: <Tr>
u 24: <Td>主旨:</Td>
u 25: <Td><Input Type="Text" Name="Subject" Value=""></Td>
u 26: </Tr>
u 27: <Tr>
u 28: <Td>邮件内容:</Td>
u 29: <Td><Textarea Name="TextBody" Cols="50" Rows="5"></TextArea> </Td>
u 30: </Tr>
u 31: <Tr>
u 32: <Td Colspan="2"><Input Type="Submit" Name="SendMail" Value="邮件发送">
u 33: <Input Type="Reset" Vluae="清除重写"></Td>
u 34: </Tr>
u 35: </Table>
u 36: </FORM>
u 37: </BODY>
u 38: </HTML>
程序说明
第13行:创建可以输入“发件人”用的“Sender”字段。
第17行:创建可以输入“收件人”用的“Recipient”字段。
第21行:创建可以输入“副本收件人”用的“CC”字段。
第25行:创建可以输入“主旨”用的“Subject”字段。
第29行:创建可以输入“邮件内容”用的“TextBody”字段。
范例程序:EX-13B.asp
笔者利用ASP程序来接收EX13-13A.htm所发送过来的字段信息。
程序内容
u 01: <HTML>
u 02: <HEAD>
u 03: <
u 04: <TITLE></TITLE>
u 05: </HEAD>
u 06: <BODY>
u 07: <%
u 08: Dim ObjectCDO
u 09: Set ObjectCDO = CreateObject("CDO.Message")
u 10: ObjectCDO.To = Request.Form("Recipient")
u 11: ObjectCDO.From = Request.Form("Sender")
u 12: ObjectCDO.CC = Request.Form("CC")
u 13: ObjectCDO.Subject = Request.Form("Subject")
u 14: ObjectCDO.textBody = Date & " " & time & Chr(10) & Request.Form("TextBody")
u 15: ObjectCDO.Send
u 16: Response.Write "邮件正本:" & Request.Form("Recipient") & "<br>"
u 17: Response.Write "邮件副本:" & Request.Form("CC") & "<br>"
u 18: Response.Write "发送日期:" & Date & "<Br>"
u 19: Response.Write "发送时间:" & Time & "<br>"
u 20: Response.Write "主旨:" & Request.Form("Subject") & "<Br>"
u 21: Response.Write "邮件内容:<Br>"
u 22: Response.Write string(20 , "=") & "<br>"
u 23: Response.Write Request.Form("TextBody") & "<Br>"
u 24: Response.Write string(20 , "=") & "<br>邮件已经为您发出!"
u 25: Set ObjectCDO = Nothing
u 26: %>
u 27: </BODY>
u 28: </HTML>
程序说明
第9行:设置变量ObjectCDO的内容为使用CreateObject方法所创建的“CDO.Message”对象。
第10行:设置CDO对象的属性“To”,其内容为EX13-13A.htm中“Recipient(收件人)”字段的输入内容。
第 11 行:设置CDO对象的属性“From”,其内容为EX13-13A.htm中“Sender(发件人)”字段的输入内容。
第12行:设置CDO对象的属性“CC”,其内容为EX13-13A.htm中“CC(副本)”字段的输入内容。
第 13 行:设置CDO对象的属性“Subject”,其内容为EX13-13A.htm中“Subject(主旨)”字段的输入内容。
第14行:设置CDO对象的属性“TextBody”,其内容为EX13–13A.htm中“TextBody(邮件内容)”字段的输入内容。同时,加上邮件的发送日期与时间,以便验证SMTP服务是否正常运行中。
第15行:使用CDO对象的方法“Send”,开始发送上述各项CDO对象的属性内容。
第16~24行:在网页上,显示CDO对象的各项属性所发送的内容。
13-3-3 使用邮件接收软件验证
笔者使用Windows操作系统所附加的Outlook Express作为邮件的接收软件。由于我们所指定的邮件转发主机为Internet上的任意一部邮件服务器,如果Outlook Express可以接收到的话,即表示SMTP服务正常运行。