在ASP.NET頁中讀取文本文件

發表于:2008-10-13來源:作者:點擊數: 標簽:文本文件NetNETASPnet
一、簡介 在現實世界中,人們經常希望能夠把某個文本文件的部分或全部內容保存到一個 Web 網頁變量中。在經典的 ASP 中,只要簡單地使用 FileSystemObject 就能做到了。其實,在 ASPFAQs.com 中就有一個 FAQ 欄目專門討論 FileSystemObject ??墒窃?ASP.NET
一、簡介

  在現實世界中,人們經常希望能夠把某個文本文件的部分或全部內容保存到一個 Web 網頁變量中。在經典的 ASP 中,只要簡單地使用 FileSystemObject 就能做到了。其實,在 ASPFAQs.com 中就有一個 FAQ 欄目專門討論 FileSystemObject ??墒窃?ASP.NET 中呢?FileSystemObject 當然還可以用,不過,經驗表明這么做會嚴重影響服務器性能。因此,最好還是使用 .NET 框架本身提供的類來讀取文件。本文要介紹的是如何讀取文本文件。今后我還會介紹如何使用 .NET 框架類來讀取 XML 文件。

 ?。?、File ? FileInfo ?

  在 .NET 框架中,有許多方法可以打開文本文件。有趣的是,所有這些方法集中在 System.IO 名字空間的兩個類中。它們是 File 類和 FileInfo 類。兩個類之間的區別很小。File 類的方法全都是共享方法(靜態方法),而FileInfo 類有例外。共享方法就是不用創建類實例也能調用的方法。假設要用這兩個類刪除文件,則可以這么做:

'使用 File 類
File.Delete(fileName)

'使用 FileInfo 類
Dim fInfo as FileInfo
fInfo = new FileInfo(fileName)
fInfo.Delete()

  請注意,File 類的 Delete 方法只帶一個參數,即待刪的文件,而且不必對 File 類進行實例化就能調用。再來看 FileInfo 類,它的 Delete 方法不帶參數,因為文件名在 FileInfo 類實例的構造器中指定。

  就我個人而言,我偏愛 File ,因此就拿它來作示范吧。我敢打賭 File 類的效率稍微高那么一點點,因為使用它就不會因為類的實例化而煩惱;不過那只是猜測而已。(如果感興趣,請不妨編程比較一下它們的性能。當你完成之后,請把結果告訴我!)

 ?。?、打開文件

  打開文本文件最簡單的途徑是調用 OpenText 方法,它將按照 UTF-8 (ASCII) 格式打開文本文件。你還可以選擇通用的 Open 方法,以便指定文件操作模式(create/open/append/truncate) 、操作權限 (read/write/read-write) 和文件共享權限了;可既然你只需要讀取文本文件,那么相對簡單的 OpenText 方法也就足以應付了。

  OpenText 方法返回一個 StreamReader 對象,只要訪問該對象就能從剛才打開的文件中讀取文本內容。因此,打開文件所用的 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)
...

  請注意,代碼的第一行導入了 System.IO 命名空間。這是因為 File 類就屬于此命名空間。還有,在 Page_Load 事件處理程序中,創建了一個字符串 FILENAME ,其內容就是欲打開的文件的物理路徑(比如 C:\Inetpub\wwwroot\Rand.txt)。最后,在 ASP.NET 中的 Server.MapPath 也和經典的 ASP 中相同 (為了更好地理解 Server.MapPath ,請別忘了閱讀位于 http://aspnet.4guysfromrolla.com/webtech/121799-1.shtml 的《Using Server.MapPath》)。

 ?。?、從文件中讀取文本

  現在,你面臨兩種選擇:(1) 讀取文件當前位置的下一行文本到字符串;(2) 讀取整個文件的文本到字符串。如果是后者,你只需調用 ReadToEnd() 方法即可:
...
'現在,讀取整個文件的文本到字符串
Dim contents as String = objStreamReader.ReadToEnd()
...

  但如果是前者呢?在讀取下一行文本之前,須得先確認尚有文本可讀。為此,可以嘗試 Peek() 方法。Peek() 方法能夠返回指定流的下一個文本字符,卻不把該字符從流中刪掉;如果流中不再有文本字符可讀,則返回 -1。接下來,只要循環遍歷 Peek() 的返回值:loop while objStreamReader.Peek() <> -1 ,并且在循環內部使用 ReadLine() 方法讀取下一行文本就行了:

While objStreamReader.Peek() <> -1
someString = objStreamReader.ReadLine()
'... do whatever else you need to do ...
End While

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97