简单、好用、开发效率高等等是ASP的优点,但是其系统操作方面如文件操作等则 是比较微弱的。要想实现这方面的功能,只有采取调用组件的办法。 FileSystemObject对象就是一个例子。ASP安装后,该对象就在系统中注册了。 不过其功能也非常一般,只能操作文本类型的文件。不过也可以满足我们的一些 需要了。前几天我的一个同事的一个朋友在网上申请了一个支持ASP的空间,想 实现诸如用户注册、信息修改、用户注销等功能,又不想用数据库来实现,因为 要进行一大堆的设置。其实利用FileSystemObject操作文本文件就可以实现。 实现的思路是:为每项信息建立一个文本文件,如姓名、性别、年龄等。所 有用户的同一个信息项都保存在相对应的文件中。如每个用户的姓名信息都保存 在姓名文件中。并且每个用户的信息都以特殊的标志开始和结束,读取信息时就 根据这些标志进行定位。例如开始标志用“`用户名`” ,结束标志用“`e`”。 只要不是常用的字符串,就可以作为定位的标志。另外,还有两个文件是必不可 少的:那就是用户名、密码文件。判断用户是否存在、用户登陆等就是利用这两 个文件实现的。下面介绍的就是本人的具体实现代码。 在程序编写前我先搞了搞了一个公共的函数单元fun.inc,这里面是一些比较 通用的函数,供其它的ASP文件包含并调用。 首先是些用户信息的函数,包括用户名、文件名、用户信息三个参数,都是 字符串类型,其中用户信息还可以是多行。代码如下:
Sub WriteUser(UserName,FileName,UserInfo) Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") If fs.FileExists(FileName) = False Then fs.CreateTextFile (FileName) End If '以添加方式打开文件 Set f = fs.OpenTextFile(FileName, 8) '用户信息开始标志 f.WriteLine ("`" & UserName & "`") f.WriteLine (UserInfo) '用户信息结束标志 f.WriteLine ("`e`") f.Close Set f = Nothing Set fs = Nothing End Sub
读用户信息的函数只需要两个参数:用户名和文件名,用户的信息作为函数 的返回值,实现的思路就是寻找开始、结束标志,并把它们之间的信息返回。代 码如下:
Function ReadUser(UserName,FileName) Dim i Dim s Dim ret Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=false then Set fs=Nothing ReadUser="" Exit Function end if '以只读方式打开文件 Set f = fs.OpenTextFile(FileName, 1) Do While f.AtEndOfStream <> True s = f.ReadLine If s = "`" & UserName & "`" Then s = f.ReadLine ret="" Do While s <> "`e`" if ret="" then ret = ret + s else ret = ret + Chr(13) & Chr(10)+s end if s = f.ReadLine Loop Exit Do End If Loop f.Close Set f = Nothing Set fs = Nothing ReadUser = ret End Function
下面是删除用户信息的函数,同样包括用户名和文件名两个参数。程序逐行 读取对应文件,如果其它用户的信息,则保存在一个字符串变量中,否则不进行 保存,然后用变量的内容重写该文件。代码如下:
Sub DeleteUser(UserName,FileName) Dim i Dim s Dim tmp Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=false then Set fs=Nothing Exit Sub end if Set f = fs.OpenTextFile(FileName, 1) tmp="" Do While f.AtEndOfStream <> True s = f.ReadLine If s <> "`" & UserName & "`" Then if tmp="" then tmp = tmp + s else tmp = tmp + Chr(13) & Chr(10)+ s end if Else Do While s <> "`e`" s = f.ReadLine Loop End If Loop f.Close Set f = fs.CreateTextFile(FileName, True) f.WriteLine tmp f.Close Set f = Nothing Set fs = Nothing End Sub
修改用户信息函数和写用户信息函数一样,带有用户名、文件名、用户信息 三个参数,只不过该函数的用户信息是更新后的信息。程序的实现和删除用户的 过程差不多,删除用户不保存要删除用户的信息到变量,修改用户则把更新后信 息保存到变量中代替原来的信息。代码如下:
Sub ModifyUser(UserName,FileName,NewUserInfo) Dim i Dim s Dim tmp Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=false then Set fs=Nothing Exit Sub end if Set f = fs.OpenTextFile(FileName, 1) tmp="" Do While f.AtEndOfStream <> True s = f.ReadLine If s <> "`" & UserName & "`" Then if tmp="" then tmp = tmp + s else tmp = tmp + Chr(13) & Chr(10)+ s end if Else Do While s <> "`e`" s = f.ReadLine Loop if tmp="" then tmp = tmp + "`" & UserName & "`" else tmp = tmp + Chr(13) & Chr(10)+ "`" & UserName & "`" end if tmp = tmp + Chr(13) & Chr(10)+ NewUserInfo tmp = tmp + Chr(13) & Chr(10) + "`e`" End If Loop f.Close Set f = fs.CreateTextFile(FileName, True) f.WriteLine tmp f.Close Set f = Nothing Set fs = Nothing End Sub
还有一个函数是用来判断用户是否存在,通过在保存用户名的文件中进行定 位来实现,代码如下:
Function UserExist(UserName,FileName) Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=False then Set fs=Nothing UserExist=False Exit Function end if Set f = fs.OpenTextFile(FileName, 1) Do While f.AtEndOfStream <> True s = f.ReadLine If s = "`" & UserName & "`" Then UserExist = True Exit Function End If Loop f.Close Set f = Nothing Set fs = Nothing UserExist = False End Function
下面就是一些文件的完整代码,演示如何通过调用上面的函数来实现基 本的用户管理:用户注册、用户登陆、用户修改、用户删除。仅供参考。程 序在Win2000 Professional+IIS调试通过。注意,文本文件都保存在当前目 录的子目录“txt”下,如果没有此目录,请手工建立,程序实现略。
'*********************fun.inc*************************************** <% dim UserNmFile,UserPwdFile,NmFile,GenderFile,MmFile
UserNmFile="txt/UserName.txt" UserPwdFile="txt/Password.txt" NmFile="txt/Name.txt" GenderFile="txt/Gender.txt" MmFile="txt/Memo.txt"
UserNmFile=Server.MapPath(UserNmFile) UserPwdFile=Server.MapPath(UserPwdFile) NmFile=Server.MapPath(NmFile) GenderFile=Server.MapPath(GenderFile) MmFile=Server.MapPath(MmFile) '//////////////////////////////////////////////////////// '写用户信息到文件 Sub WriteUser(UserName,FileName,UserInfo) Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") If fs.FileExists(FileName) = False Then fs.CreateTextFile (FileName) End If '以添加方式打开文件 Set f = fs.OpenTextFile(FileName, 8) '用户信息开始标志 f.WriteLine ("`" & UserName & "`") f.WriteLine (UserInfo) '用户信息结束标志 f.WriteLine ("`e`") f.Close Set f = Nothing Set fs = Nothing End Sub '读取用户信息 Function ReadUser(UserName,FileName) Dim i Dim s Dim ret Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=false then Set fs=Nothing ReadUser="" Exit Function end if '以只读方式打开文件 Set f = fs.OpenTextFile(FileName, 1) Do While f.AtEndOfStream <> True s = f.ReadLine If s = "`" & UserName & "`" Then s = f.ReadLine ret="" Do While s <> "`e`" if ret="" then ret = ret + s else ret = ret + Chr(13) & Chr(10)+s end if s = f.ReadLine Loop Exit Do End If Loop f.Close Set f = Nothing Set fs = Nothing ReadUser = ret End Function '删除用户信息 Sub DeleteUser(UserName,FileName) Dim i Dim s Dim tmp Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=false then Set fs=Nothing Exit Sub end if Set f = fs.OpenTextFile(FileName, 1) tmp="" Do While f.AtEndOfStream <> True s = f.ReadLine If s <> "`" & UserName & "`" Then if tmp="" then tmp = tmp + s else tmp = tmp + Chr(13) & Chr(10)+ s end if Else Do While s <> "`e`" s = f.ReadLine Loop End If Loop f.Close Set f = fs.CreateTextFile(FileName, True) f.WriteLine tmp f.Close Set f = Nothing Set fs = Nothing End Sub '修改用户信息 Sub ModifyUser(UserName,FileName,NewUserInfo) Dim i Dim s Dim tmp Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=false then Set fs=Nothing Exit Sub end if Set f = fs.OpenTextFile(FileName, 1) tmp="" Do While f.AtEndOfStream <> True s = f.ReadLine If s <> "`" & UserName & "`" Then if tmp="" then tmp = tmp + s else tmp = tmp + Chr(13) & Chr(10)+ s end if Else Do While s <> "`e`" s = f.ReadLine Loop if tmp="" then tmp = tmp + "`" & UserName & "`" else tmp = tmp + Chr(13) & Chr(10)+ "`" & UserName & "`" end if tmp = tmp + Chr(13) & Chr(10)+ NewUserInfo tmp = tmp + Chr(13) & Chr(10) + "`e`" End If Loop f.Close Set f = fs.CreateTextFile(FileName, True) f.WriteLine tmp f.Close Set f = Nothing Set fs = Nothing End Sub '判断用户是否已存在 Function UserExist(UserName,FileName) Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject") if fs.FileExists(FileName)=False then Set fs=Nothing UserExist=False Exit Function end if Set f = fs.OpenTextFile(FileName, 1) Do While f.AtEndOfStream <> True s = f.ReadLine If s = "`" & UserName & "`" Then UserExist = True Exit Function End If Loop f.Close Set f = Nothing Set fs = Nothing UserExist = False End Function
%>
'********************index.htm************************************* <html>
<body> <a href="register.htm">用户注册 </a><br> <a href="login.htm">用户登陆 </a><br> <a href="modify.htm">用户修改 </a><br> <a href="delete.htm">用户删除 </a><br> </body>
</html> '****************register.htm*************************************** <html>
<body> 用户注册 <form name="form1" method="post" action="regsubmit.asp"> <table border="0"> <tr> <td width="28%">用户名</td> <td width="72%"> <input type="text" name="edtUserNm"> </td> </tr> <tr> <td width="28%">密码</td> <td width="72%"> <input type="text" name="edtUserPwd"> </td> </tr> <tr> <td width="28%">姓名</td> <td width="72%"> <input type="text" name="edtNm"> </td> </tr> <tr> <td width="28%">性别</td> <td width="72%"> <input type="text" name="edtGender"> </td> </tr> <tr> <td width="28%">简历</td> <td width="72%"> <textarea name="edtMm"></textarea> </td> </tr> <tr> <td width="28%"> </td> <td width="72%"> <input type="submit" name="Submit" value="提交"> </td> </tr>
</table> <p> </p> </form>
</body>
</html>
'***************************regsubmit.asp************************** <!--#include file="fun.inc"-->
<% dim UserNm,UserPwd,Nm,Gender,Memo UserNm=Request("edtUserNm") UserPwd=Request("edtUserPwd") Nm=Request("edtNm") Gender=Request("edtGender") Mm=Request("edtMm")
if trim(UserNm)="" then Response.Write "用户名不能为空" Response.End end if
'判断用户是否已存在 if UserExist(UserNm,UserNmFile) then Response.Write "用户已存在" Response.End end if
'写用户信息到各个文件 WriteUser UserNm,UserNmFile,UserNm WriteUser UserNm,UserPwdFile,UserPwd WriteUser UserNm,NmFile,Nm WriteUser UserNm,GenderFile,Gender WriteUser UserNm,MmFile,Mm
Response.Write "注册成功,以下为注册信息" & "<br><br>" Response.Write "用户名:" & UserNm & "<br>" Response.Write "密码:" & UserPwd & "<br>" Response.Write "姓名:" & Nm & "<br>" Response.Write "性别:" & Gender & "<br>" Response.Write "简历:" & Mm %>
<html> <body> </body> </html>
'****************************login.htm************************ <html>
<body> 用户登陆 <form name="form1" method="post" action="loginsubmit.asp"> <table border="0"> <tr> <td width="28%">用户名</td> <td width="72%"> <input type="text" name="edtUserNm"> </td> </tr> <tr> <td width="28%">密码</td> <td width="72%"> <input type="text" name="edtUserPwd"> </td> </tr> <tr> <td width="28%"> </td> <td width="72%"> <input type="submit" name="Submit" value="登陆"> </td> </tr> </table>
</form>
</body>
</html>
'****************************loginsubmit.asp********************** <!--#include file="fun.inc"-->
<% dim UserNm,UserPwd UserNm=Request("edtUserNm") UserPwd=Request("edtUserPwd")
'判断用户是否已存在 if UserExist(UserNm,UserNmFile)=False then Response.Write "用户名不存在" Response.End end if
dim SavePwd SavePwd=ReadUser(UserNm,UserPwdFile)
if SavePwd<>UserPwd then Response.Write "密码错误" Response.End end if
Response.Write "登陆成功"
%>
<html> <body> </body> </html>
'***************************modify.htm***************************** <html>
<body> 用户修改 <form name="form1" method="post" action="modifylist.asp"> <table border="0"> <tr> <td width="28%">用户名</td> <td width="72%"> <input type="text" name="edtUserNm"> </td> </tr> <tr> <td width="28%"> </td> <td width="72%"> <input type="submit" name="Submit" value="调出信息"> </td> </tr> </table>
</form>
</body>
</html>
'**************************modifylist.asp**************************** <!--#include file="fun.inc"--> <% dim UserNm UserNm=Request("edtUserNm")
'判断用户是否已存在 if UserExist(UserNm,UserNmFile)=False then Response.Write "用户名不存在" Response.End end if
dim UserPwd,Nm,Gender,Mm UserPwd=ReadUser(UserNm,UserPwdFile) Nm=ReadUser(UserNm,NmFile) Gender=ReadUser(UserNm,GenderFile) Mm=ReadUser(UserNm,MmFile)
%> <html> <body> 用户信息修改 <form name="form1" method="post" action="modifysubmit.asp"> <table border="0"> <tr> <td width="28%">用户名</td> <td width="72%"> <b><font color="#0000ff"><%Response.Write UserNm %></font></b> <input type="hidden" name="edtUserNm" value=<%=UserNm %>> </td> </tr> <tr> <td width="28%">密码</td> <td width="72%"> <input type="text" name="edtUserPwd" value=<%=UserPwd %>> </td> </tr> <tr> <td width="28%">姓名</td> <td width="72%"> <input type="text" name="edtNm" value=<%=Nm %>> </td> </tr> <tr> <td width="28%">性别</td> <td width="72%"> <input type="text" name="edtGender" value=<%=Gender %>> </td> </tr> <tr> <td width="28%">简历</td> <td width="72%"> <textarea name="edtMm"><%=Mm %></textarea> </td> </tr> <tr> <td width="28%"> </td> <td width="72%"> <input type="submit" name="Submit" value="保存修改"> </td> </tr>
</table> <p> </p> </form>
</body>
</html>
'********************************modifysubmit.asp******************* <!--#include file="fun.inc"-->
<% dim UserNm,UserPwd,Nm,Gender,Mm UserNm=Request("edtUserNm") UserPwd=Request("edtUserPwd") Nm=Request("edtNm") Gender=Request("edtGender") Mm=Request("edtMm")
if trim(UserNm)="" then Response.Write "用户名不能为空" Response.End end if
'更新用户信息到各个文件 ModifyUser UserNm,UserNmFile,UserNm ModifyUser UserNm,UserPwdFile,UserPwd ModifyUser UserNm,NmFile,Nm ModifyUser UserNm,GenderFile,Gender ModifyUser UserNm,MmFile,Mm
Response.Write "保存成功,以下为更新后的信息" & "<br><br>" Response.Write "用户名:" & UserNm & "<br>" Response.Write "密码:" & UserPwd & "<br>" Response.Write "姓名:" & Nm & "<br>" Response.Write "性别:" & Gender & "<br>" Response.Write "简历:" & Mm %>
<html> <body> </body> </html>
'*************************delete.htm****************************** <html>
<body> 用户删除 <form name="form1" method="post" action="deletesubmit.asp"> <table border="0"> <tr> <td width="28%">用户名</td> <td width="72%"> <input type="text" name="edtUserNm"> </td> </tr> <tr> <td width="28%"> </td> <td width="72%"> <input type="submit" name="Submit" value="删除"> </td> </tr> </table>
</form>
</body>
</html>
'*******************************deletesubmit.asp******************** <!--#include file="fun.inc"-->
<% dim UserNm UserNm=Request("edtUserNm")
'判断用户是否已存在 if UserExist(UserNm,UserNmFile)=False then Response.Write "用户名不存在" Response.End end if
DeleteUser UserNm,UserNmFile DeleteUser UserNm,UserPwdFile DeleteUser UserNm,NmFile DeleteUser UserNm,GenderFile DeleteUser UserNm,MmFile
Response.Write "删除成功"
%>
<html> <body> </body> </html> ********************the end**************************** |