打印本文 打印本文  关闭窗口 关闭窗口
ASP与SQL网站数据库程序设计(14)
作者:.. 文章来源:科学出版社 点击数: 更新时间:2004/1/25 0:55:29

Server 对象与其他对象的整合、应用

13-1 FSO文件对象组件

13-2 文本文件的读取与写入

13-3 CDO对象


13-1  FSO文件对象组件

ASPFile System Object对象可以对网页提供非常完善的文本文件的处理,但是这些文本文件的操作仅限于服务器端的文件处理,而不是指客户端的文件或文件夹。

13-1-1 FileSystemObject对象的基础

FSOFileSystemObject对象模式的简称,这是一个ASP的外部对象。同时,只要用户的ASP2.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编译器将会创建一个名为ObjFSOFileSystemObject对象。此时,FSO对象模式即具有取得服务器驱动器信息的Drive对象,创建、删除以及移动文件夹的Folder对象、文字处理的File对象。在一般的使用习惯上,在ASP程序中使用FSO对象的情况下,大多使用文本文件的读写处理方面。

有关FileTextStream对象的使用部分,在稍候的章节中将会详细叙述,在本节和下一节主要说明FileTextStream对象的使用。

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:指定文件是否以UnicodeASCII文件格式创建,如果文件以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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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属性值及意义

   

   

Normal

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]]])

语法说明

·       ObjectNameFSO对象模式的对象名称。

·       filename:文件的完整路径与名称。

·       iomode:可选,输入/输出模式,可以是下列三个常数之一:ForReadingForWritingForAppendingiomode自变量可以是下列其中一个设置。

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            Loop

文本文件相关的读取属性,如表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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: Loop

程序说明

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 ServiceIIS子组件即可

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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: <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

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服务正常运行。



打印本文 打印本文  关闭窗口 关闭窗口