循环遍历 Peek() 的返回值:loop while objStreamReader.Peek() <> -1 ,并且在循环内部使用 ReadLine() 方法读取下一行文本就行了:
While objStreamReader.Peek() <> -1
someString = objStreamReader.ReadLine()
'' do whatever else you need to do
End While
切记!关闭 StreamReader 对象!
当你读完全部文本,并且不再操作此文件时,千万记住要使用 Close() 方法关闭 StreamReader 对象,以关闭此文件。如果你忘记这么做,则 ASP.NET 操作进程将保持对此文件的只读锁定状态,因而当你换用其它帐号操作此文件时将会遇到错误信息 “access denied”(拒绝访问) ;而且当你试图删除或覆盖此文件时也将遇到同样的错误信息;只不过 ASP.NET 本身对此文件的操作却不受影响。因此,一定要在完成操作之后关闭文件。
附:完整的示范程序
<%@ Import Namespace="System.IO" %>
<script language="vb" runat="server">
sub Page_Load(sender as Object, e as EventArgs)
''以只读方式打开一个文件
Dim FILENAME as String = Server.MapPath("Rand.txt")
''实例化一个 StreamReader 对象用于读取文件
Dim objStreamReader as StreamReader
objStreamReader = File.OpenText(FILENAME)
''现在,读入整个文件的文本并保存到一个字符串里
Dim contents as String = objStreamReader.ReadToEnd()
''在一个 Web 控件中显示文本
lblRawOutput.Text = contents
''为了在便于浏览,最好把回车字符替换成 <br>
lblNicerOutput.Text = contents.Replace(vbCrLf, "<br>")
objStreamReader.Close()
end sub
</script>
<b>Raw File Output</b><br />
<asp:label runat="server" id="lblRawOutput" />
<p>
<b>Nicer Output</b><br />
<asp:label runat="server" id="lblNicerOutput" Font-Name="Verdana" />
结论
本文附带了一个示范程序的源代码。该程序简单地打开一个硬编码的(hard-coded)文本文件,然后把其中的所有文本一次性保存到指定字符串里,再把字符串的值显示在服务器端的一个 Web 控件 label 中。
你看,通过 ASP.NET 页面读取文本文件内容实在不难。虽然在语法上和经典 ASP 的 FileSystemObject 对象有些差异,但是学起来真的很容易。为了更好的掌握如何在 ASP.NET 中读写文件,请务必阅读 《ASP.NET: Tips, Tutorials, and Code》一书 (样本见 http://www.4guysfromrolla.com/webtech/chapters/ASPNET2 )!