熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 12:23:27  來源: .NET編程 
  簡介

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

  1File ? FileInfo ?

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

使用 File 類
FileDelete(fileName)

使用 FileInfo 類
Dim fInfo as FileInfo
fInfo = new FileInfo(fileName)
fInfoDelete()

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

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

  2打開文件

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

  OpenText 方法返回一個 StreamReader 對象只要訪問該對象就能從剛才打開的文件中讀取文本內容因此打開文件所用的 ASPNET 代碼大致如下

<%@ Import Namespace=SystemIO %>
<script language=vb runat=server>
sub Page_Load(sender as Object e as EventArgs)
只讀方式打開文件
Dim FILENAME as String = ServerMapPath(Randtxt)

創建 StreamReader 類實例准備讀取文件內容
Dim objStreamReader as StreamReader
objStreamReader = FileOpenText(FILENAME)

  請注意代碼的第一行導入了 SystemIO 命名空間這是因為 File 類就屬於此命名空間還有在 Page_Load 事件處理程序中創建了一個字符串 FILENAME 其內容就是欲打開的文件的物理路徑(比如 C:\Inetpub\wwwroot\Randtxt)最後在 ASPNET 中的 ServerMapPath 也和經典的 ASP 中相同 (為了更好地理解 ServerMapPath 請別忘了閱讀位於 http://aspnetguysfromrollacom/webtech/shtml 的《Using ServerMapPath》)

  3從文件中讀取文本

  現在你面臨兩種選擇() 讀取文件當前位置的下一行文本到字符串() 讀取整個文件的文本到字符串如果是後者你只需調用 ReadToEnd() 方法即可

現在讀取整個文件的文本到字符串
Dim contents as String = objStreamReaderReadToEnd()

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

While objStreamReaderPeek() <>
someString = objStreamReaderReadLine()
do whatever else you need to do
End While

切記!關閉 StreamReader 對象!

  當你讀完全部文本並且不再操作此文件時千萬記住要使用 Close() 方法關閉 StreamReader 對象以關閉此文件如果你忘記這麼做則 ASPNET 操作進程將保持對此文件的只讀鎖定狀態因而當你換用其它帳號操作此文件時將會遇到錯誤信息 access denied(拒絕訪問) 而且當你試圖刪除或覆蓋此文件時也將遇到同樣的錯誤信息只不過 ASPNET 本身對此文件的操作卻不受影響因此一定要在完成操作之後關閉文件

完整的示范程序

<%@ Import Namespace=SystemIO %>
<script language=vb runat=server>
sub Page_Load(sender as Object e as EventArgs)
以只讀方式打開一個文件
Dim FILENAME as String = ServerMapPath(Randtxt)

實例化一個 StreamReader 對象用於讀取文件
Dim objStreamReader as StreamReader
objStreamReader = FileOpenText(FILENAME)

現在讀入整個文件的文本並保存到一個字符串裡
Dim contents as String = objStreamReaderReadToEnd()

在一個 Web 控件中顯示文本
lblRawOutputText = contents

為了在便於浏覽最好把回車字符替換成 <br>
lblNicerOutputText = contentsReplace(vbCrLf <br>)

objStreamReaderClose()
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 FontName=Verdana />

  二結論

  本文附帶了一個示范程序的源代碼該程序簡單地打開一個硬編碼的(hardcoded)文本文件然後把其中的所有文本一次性保存到指定字符串裡再把字符串的值顯示在服務器端的一個 Web 控件 label 中

  你看通過 ASPNET 頁面讀取文本文件內容實在不難雖然在語法上和經典 ASP 的 FileSystemObject 對象有些差異但是學起來真的很容易為了更好的掌握如何在 ASPNET 中讀寫文件請務必閱讀 《ASPNET: Tips Tutorials and Code》一書 (樣本見 http://wwwguysfromrollacom/webtech/chapters/ASPNET )!


From:http://tw.wingwit.com/Article/program/net/201311/15807.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.