国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:55:53
字體:
來源:轉載
供稿:網友
國內最大的酷站演示中心!
簡介
在現實世界中,人們經常希望能夠把某個文本文件的部分或全部內容保存到一個 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

切記!關閉 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 )! 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟水县| 苏尼特左旗| 白银市| 寿光市| 垣曲县| 且末县| 东安县| 梁山县| 鄯善县| 敖汉旗| 睢宁县| 鹤壁市| 饶平县| 定陶县| 肇东市| 南丹县| 霸州市| 蓬莱市| 屯留县| 乡城县| 湘潭县| 东海县| 兴隆县| 巴东县| 吴桥县| 上高县| 阳城县| 乌兰浩特市| 城步| 民权县| 内乡县| 杭州市| 综艺| 敖汉旗| 盈江县| 泰来县| 资阳市| 车致| 青海省| 丰原市| 辽源市|