ASP.NET中的STREAMREADER對象總結

來源:互聯網
上載者:User
asp.net|stream|對象 前面我介紹了system.io空間下的檔案操作對象,這裡我講解一下如何製作應用於特定頁面的計數器。每個計數器都需要一個相應的檔案來儲存當前的訪問量,那麼如何建立用來技術的檔案、如何對技術檔案進行讀寫以及如何顯示當前訪問量是我們需要解決的問題。

首先 擷取技術檔案

因為是單頁面計數器,並不應用於特定頁面,所以必須能根據當前頁面的不同而擷取或者產生不同的技術檔案。最好把技術檔案和頁面起相同的名字起不同的副檔名。

我們把擷取計數器檔案部分的程式碼封裝裝成一個函數:


function mike_getfilename() as string
dim mike_path as string
dim mike_position as integer
mike_path=request.servervariables("path_translated")
mike_position=instrrev(mike_path,".")
mike_getfilename=mid(mike_path,1,mike_position) & "count"
end function


使用request對象的servervariables("PATH_TRANSLATED")方法來擷取當前頁面的絕對路徑。
instrRev函數返回某字串在另一個字串中出現的從結尾計起的位置
mid函數用於從字串中返回指定數目的字元 Mid(string, start[, length])
參數
string:字串運算式,從中返回字元。如果 string 包含 Null,則返回 Null。
Start:string 中被提取的字元部分的開始位置。如果 start 超過了 string 中字元的數目,Mid 將返回零長度字串 ("")。
Length:要返回的字元數。如果省略或 length 超過文本的字元數(包括 start 處的字元),將返回字串中從 start 到字串結束的所有字元

使用mid(mike_path,1,mike_position)將當前頁面的檔案名稱和.一起截取下來,然後把我們定義的副檔名連到串上,就得到了我們需要的計數檔案名稱。



然後 讀取計數檔案

下面我們要進行的操作是對計數檔案進行讀寫操作,首先我們使用先前定義的mike_getfilename()函數得到當前檔案名稱:

dim mike_pathname as string
mike_pathname=mike_getfilename()


執行個體化一個對該檔案的讀取通道,即建立一個filestream對象:

mike_stream=new filestream(mike_pathname,filemode.openorcreate,fileaccess.read)


防止出現異常即該頁面第一次被訪問,計數檔案使用openorcreate建立。
下面使用streamreader對象對檔案進行讀取操作:
mike_readobj=new streamreader(mike_stream)
mike_str=mike_readobj.readline()
mike_readobj.close()

這裡我們應用到了前面介紹過的streamreader對象的建構函式產生streamreader對象,然後使用readline()方法來讀取檔案內容,需要特別注意的是
mike_readobj.close()
這個語句很重要,否則當前計數檔案就一直被streamreader對象獨佔,下面對檔案進行寫操作時就會失敗,所以必須使用close()方法釋放被streamreader對象佔用的檔案和系統資源。

其次 顯示當前訪問量

當前訪問量可以採用response.write()方法來顯示,這種方法的缺點是不能調整計數器的顯示位置。這裡我們利用asp.net中的伺服器控制項label,在商務邏輯代碼區設定該控制項的text屬性。這樣就體現出商務邏輯和頁面邏輯代碼分離的優勢,不過畢竟還是在一個檔案中,我個人推薦用代碼後置即前台頁面放在aspx檔案,後台檔案儲存成一個類檔案。


count=cint(mike_str)
count+=1
mikecat.text=count


我們通過streamreader讀取出來的計數檔案轉換為數值,然後計數值加1,再在LABEL控制項顯示出來。此時的mikecat就是label控制項。

最後 寫入計數器檔案

進行寫入操作之前仍需要建立一個寫入通道:
mike_stream=new filestream(mike_pathname,filemode.open,fileaccess.write)
由於此時計數檔案已經存在因此我們僅用到了filemode.open
我們使用streamwriter對象的建構函式來產生一個streamwriter對象來進行檔案寫操作:

mike_writerobj=new streamwriter(mike_stream)
mike_writerobj.writeline(count)
mike_writerobj.close()




下面給出全部計數器代碼,大家可以瞭解一下其中細節


<%@ Page Language="VB" Debug="True" Explicit="True"%>
<%@ Import Namespace="System.IO" %>

<html>
<head>
<title> New ASP.NET Document </title>
</head>
<body bgcolor="#FFFFFF" topmargin="0" marginheight="0">

<script runat="server" language="vb">

Sub Page_Load(Source As Object, E As EventArgs)
If Not page.ispostback then
Dim count As integer
Dim mike_stream As filestream
Dim mike_pathname,mike_str As string
Dim mike_readobj As streamreader
Dim mike_writerobj As streamwriter
mike_pathname=mike_getfilename()
mike_stream=New filestream(mike_pathname,filemode.openorcreate,fileaccess.read)
mike_readobj=New streamreader(mike_stream)
mike_str=mike_readobj.readline()
mike_readobj.close()
count=cint(mike_str)
count+=1
mikecat.text=count
mike_stream=New filestream(mike_pathname,filemode.open,fileaccess.write)
mike_writerobj=New streamwriter(mike_stream)
mike_writerobj.writeline(count)
mike_writerobj.close()
End if
End Sub

Function mike_getfilename() As string
Dim mike_path As string
Dim mike_position As integer
mike_path=request.servervariables("PATH_TRANSLATED")
mike_position=instrrev(mike_path,".")
mike_getfilename=mid(mike_path,1,mike_position) & "count"
End function

</script>

<form runat="server" method="">
<asp:Label id="mikecat" runat="server"/>
</form>

</body>
</html>
我們這裡稍加修改即成為漂亮的圖形計數器,兩種計數器在檔案讀寫方面完全一致。在ASP.NET中用於裝載圖片的控制項是image控制項,因此下面就採用動態產生image控制項的方法來實現動態產生圖形。這個容器我們採用<div id="mike_div" runat="server"/>這裡我們需要準備10張圖,分別是0~9十個數位圖片(取名0~9.gif),我們採用下面的方法動態產生映像:dim mike_img as image
dim mike_graph as string
dim i as integer
count=cint(mike_str)+1
for i=1 to len(count)
mike_img=new image()
mike_graph=mid(count,i,1)
mike_img.imageurl=mike_graph & ".gif"
mike_div.controls.add(mike_img)
next
首先我們根據當前的計數字串的長度來決定需要產生的圖形的長度。 new 指令來動態產生image控制項,然後用imageurl屬性指定要顯示的圖片路徑。最後使用mike_div的add方法將當前產生的image控制項加入到容器的控制項集合中。好了,把這段代碼加入上面的計數器代碼中就成了圖形計數器。呵呵。大家試試吧!~


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.