利用ASP的文件操作实现用户管理

    技术2022-05-11  140

    利用ASP的文件操作实现用户管理

        简单、好用、开发效率高等等是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 = NothingEnd 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 = retEnd 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 = NothingEnd 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 = NothingEnd 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 = FalseEnd Function    下面就是一些文件的完整代码,演示如何通过调用上面的函数来实现基本的用户管理:用户注册、用户登陆、用户修改、用户删除。仅供参考。程序在Win2000 Professional+IIS调试通过。注意,文本文件都保存在当前目录的子目录“txt”下,如果没有此目录,请手工建立,程序实现略。'*********************fun.inc***************************************<%dim UserNmFile,UserPwdFile,NmFile,GenderFile,MmFileUserNmFile="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 = NothingEnd 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 = retEnd 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 = NothingEnd 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 = NothingEnd 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 = FalseEnd 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,MemoUserNm=Request("edtUserNm")UserPwd=Request("edtUserPwd")Nm=Request("edtNm")Gender=Request("edtGender")Mm=Request("edtMm")if trim(UserNm)="" then  Response.Write "用户名不能为空"  Response.Endend if'判断用户是否已存在if UserExist(UserNm,UserNmFile) then  Response.Write "用户已存在"  Response.Endend if'写用户信息到各个文件WriteUser UserNm,UserNmFile,UserNmWriteUser UserNm,UserPwdFile,UserPwdWriteUser UserNm,NmFile,NmWriteUser UserNm,GenderFile,GenderWriteUser UserNm,MmFile,MmResponse.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,UserPwdUserNm=Request("edtUserNm")UserPwd=Request("edtUserPwd")'判断用户是否已存在if UserExist(UserNm,UserNmFile)=False then  Response.Write "用户名不存在"  Response.Endend ifdim SavePwdSavePwd=ReadUser(UserNm,UserPwdFile)if SavePwd<>UserPwd then  Response.Write "密码错误"  Response.Endend ifResponse.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 UserNmUserNm=Request("edtUserNm")'判断用户是否已存在if UserExist(UserNm,UserNmFile)=False then  Response.Write "用户名不存在"  Response.Endend ifdim UserPwd,Nm,Gender,MmUserPwd=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,MmUserNm=Request("edtUserNm")UserPwd=Request("edtUserPwd")Nm=Request("edtNm")Gender=Request("edtGender")Mm=Request("edtMm")if trim(UserNm)="" then  Response.Write "用户名不能为空"  Response.Endend if'更新用户信息到各个文件ModifyUser UserNm,UserNmFile,UserNmModifyUser UserNm,UserPwdFile,UserPwdModifyUser UserNm,NmFile,NmModifyUser UserNm,GenderFile,GenderModifyUser UserNm,MmFile,MmResponse.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 UserNmUserNm=Request("edtUserNm")'判断用户是否已存在if UserExist(UserNm,UserNmFile)=False then  Response.Write "用户名不存在"  Response.Endend ifDeleteUser UserNm,UserNmFileDeleteUser UserNm,UserPwdFileDeleteUser UserNm,NmFileDeleteUser UserNm,GenderFileDeleteUser UserNm,MmFileResponse.Write "删除成功"%><html><body></body></html>'************************************the end*********************************

    更多更好文章尽在“天铭心草堂http”-http://vip.6to23.com/tianmingxin

    (2002/12/3 三金 版权所有)


    最新回复(0)