中华考试网·阅读新闻
编程开发 > ASP > 文章内容

ASP完整教程(38)

2016-1-4编辑:guomu

File Access 组件如果你的网龄足够大的话,你一定见过“恐龙时代”的 CGI 留言簿,那是 WEB 留言簿最早的雏形。那时候在基于 Internet 的 WEB 应用程序中连接服务器后端数据库还十分困难,因此留言簿中的历史信息并不是同如今一样存储在后端数据库中。那么这些数据究竟是保存在哪里的呢?答案就是“文本文件”, CGI 程序可以将从客户端接收的信息写进一个存放在服务器端的文本文件中,该文件可以是 HTML 文件或 TXT 等文件,这样就使得程序员们可以不通过同数据库连接就可以将客户信息保存下来,但是写此类 CGI 程序甚是烦琐,下面列出了一个此类程序的最简单的样本 :

#!/usr/local/bin/perl

# Perl Location one your server

print "Content-type: text/plain\n\n";

if($ENV{'REQUEST_METHOD'}eq"POST"){

read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});

}elsif($ENV{'REQUEST_METHOD'}eq"GET"){

$buffer=$ENV{'QUERY_STIRNG'};

}

@pairs=split(/&/,$buffer);

foreach $pair(@pairs){

($name,$value)=split(/=/,$pair);

$value=~tr/+//;

$value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;

$FORM{$name}=$value;}

$file_name="guestbook.txt";#File name

#具体内容

open(FILE,">>$file_name")||die "打开文件错误";

print FILE "记录时间":$date \n\n";

print FILE "姓名":$FORM{'name'}";

print FILE "单位":$FORM{'company'}\n";

print FILE "电话":$FORM{'phone'}

print FILE "地址":$FORM{'address'}\n";

print FILE "邮编":$FORM{'zip'}

print FILE "邮件地址":$FORM{'email'}\n";

print FILE "返回意见":$FORM{'content'}

close (FILE)

  大家可以感觉到,与 ASP 相比此类 CGI 程序的可读性和易操作性都较差。那么你一定想问 ASP 是否也能直接在服务器上写文件呢?答案当然是肯定的。但是聪明的朋友可能会想到,既然 ASP 同 WEB 数据库的连接如此便捷,我们又何需再将客户信息写在文本文件中呢, ASP 的这个功能岂不是画蛇添足?的确,对于那些我们常见的留言簿、 BBS 等 WEB 应用程序而言,无论是在程序的执行效率还是易用性上,我们都不可能再用写文本文件来替代数据库,但是在某些 WEB 应用领域里写文本文件既是一种规范也是一种相对数据库而较便捷的方法。如果你对 NT 较熟悉的话,你一定知道 NT 具有非常强大的安全机制,它可以将几乎所有的服务器操作和连接的信息自动保存在一个后缀名为 .log 的文件中,其实这种技术也完全可以被运用在 WEB 上,用来记录一些的客户登陆信息。下面的这段程序正是利用 ASP 读写文本文件的特性,在一个 WEB BBS 程序中创建自动记录每个用户发言记录的功能。

< %

Set fs = CreateObject("Scripting.FileSystemObject")

ForReading = 1

'以只读模式打开文件。不能对此文件进行写操作。

ForAppending = 8

'打开文件并在文件末尾进行写操作。

TristateUseDefault = -2

TristateTrue = -1

TristateFalse = 0

'-----------写入系统log开始--------

servermap=server.MapPath("\bbs\log\")

'映射系统物理路径

temp=servermap&"\"&year(date)&month(date)&"\"

'获取系统物理路径和时间,并以此作为log文件存放的物理路径

if Not fs.FolderExists(temp) then

fs.CreateFolder(temp)

end if

'检测是否存在文件夹,否则自动创建

dim syslog

dim tempname

tempname=date

syslog=temp&tempname&".log"

'文件名为e:\bbs\log\月份\月日.log

li=user&"&"&Now&"&"&Request.ServerVariables("REMOTE_ADDR")&"&"&tempfile&"&"&letter&"&"&title

'log文件记录的格式为:用户名&发信时间&用户ip&文件路径&信区&信件标题

if fs.FileExists(syslog) then

Set ss = fs.OpenTextFile(syslog,ForAppending,true)

else

set ss = fs.CreateTextFile(syslog,ForWriting,false)

end if

'检测log文件是否存在,如果存在则追加文件内容,反之则直接写文件

ss.WriteLine(li)

ss.Close

'-----------log文件写入结束---------

%>

  如果你没有完全看懂上面的这段程序,就请听作者慢慢道来。 File Access 组件提供了可用来访问计算机文件系统的方法和属性。我们可以使用 File Access 组件创建 FileSystemObject 对象,以上程序的第一句就是利用 File Access 组件创建了一个名为 fs 的对象实例。在对象被创建后,你可以通过它访问文件,该对象没有属性,它唯一的意义就是创建、打开或读写文本文件。 FileSystemObject 对象有两种最常用的方法,一种用来创建文件,另一种是用来打开并读写文本文件。 CreateTextFile 方法获得你指定的文件名并创建该文件,它返回一个 TextStream 对象,你可以用该对象在文件被创建后操作该文件, CreateTextFile 方法的语法如下 :

Set objTextStream= FileSystemObject.CreateTextFile (Filename, [Overwrite] , [Unicode])

ASP完整教程(37)
咨询热线:4000-525-585(免长途费)