ASP.NET 網頁製作教本 – 從基本語法學起 第11章 網頁間的資料共用
11-1 網頁間共用資料的基本觀念
同一網頁的資料共用
Somepage.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <Form runat="server"> <asp:TextBox runat="server" id="sData" Visible=False /><P> <asp:Button runat="server" Text="PostBack" OnClick="Button_Click"/> </Form> </BODY> </HTML>
Somepage.aspx Part II <script Language="VB" runat="server"> Dim gData As Integer Sub Page_Load(sender As Object, e As EventArgs) gData = gData + 100 sData.Text = Val(sData.Text) + 100 Response.Write( "gData=" & gData & "<br>") Response.Write( "sData=" & Val(sData.Text) ) End Sub Sub Button_Click(sender As Object, e As EventArgs) </script>
瀏覽此一網頁
Somepage.aspx 的啟示 一般變數無法做為共用資料,而 Server 控制元件則可以成為同一網頁在不同狀態下(第一次載入網頁、按鈕被按下時、事件發生時…等狀態)的共用資料。
可以成為共用資料的標的物
共用資料的模式
11-2 Application 物件
Application 物件
利用 Application 物件存放資料的語法 ' 讀取存放在Application物件中的資料 資料 = Application( "資料名稱" ) ' 將資料寫入Application物件中 Application( "資料名稱" ) = 資料
app01.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <Form runat="server"> <asp:Button runat="server" Text="PostBack" OnClick="Button_Click"/> </Form> </BODY> </HTML>
app01.aspx Part II <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim appData appData = Application("appData") appData = appData + 100 Application("appData") = appData Response.Write( "appData=" & Application("appData") ) End Sub Sub Button_Click(sender As Object, e As EventArgs) </script>
app01.aspx 網頁
直接把 Application 物件當成資料來使用 節錄 app02.aspx Sub Page_Load(sender As Object, e As EventArgs) Application("appData") = Application("appData") + 100 Response.Write( "appData=" & Application("appData") ) End Sub
資料的非同步更新 在電腦內部的執行過程會分成: Application("appData") = Application("appData") + 100 在電腦內部的執行過程會分成: (1) 讀取 Application(“appData”) 的值。 (2) 將讀取的值加 100。 (3) 將加 100 之後的值寫回 Application("appData")。 如果有兩位連線者同時瀏覽網頁,並且同時執行以上的步驟 (1),那麼他們所讀取的值相同(假設等於 100),接著雖然也都執行了步驟 (2)(3) 把加100 的結果寫回 Application(“appData”) 而得到 200的結果,但實際上卻少加了 100。
Lock / Unlock 不讓任何兩位連線者同時執行以上的「Application("appData") = Application("appData") + 100」敘述,而要避免此一情事的發生,須把程式改成: Application.Lock ' 鎖定 Application 物件 Application("appData") = Application("appData") + 100 Application.UnLock ' 解除 Application 物件的鎖定
節錄 app03.aspx Sub Page_Load(sender As Object, e As EventArgs) Application.Lock ' 鎖定 Application 物件 Application("appData") = Application("appData") + 100 Response.Write( "appData=" & Application("appData") ) Application.UnLock ' 解除 Application 物件的鎖定 End Sub
Application 物件的生命週期
Application 物件的實際應用(1)
Application 物件的實際應用 (2)
節錄 AppNoUse.aspx Part I Sub OpenDataBase_And_BindToDataGrid() Dim Conn As OleDbConnection Dim Adpt As OleDbDataAdapter Dim Ds As DataSet Dim Provider = "Provider=Microsoft.Jet.OLEDB.4.0" Dim Database = "Data Source=" & Server.MapPath( "Sample.mdb" ) Conn = New OleDbConnection( Provider & ";" & DataBase ) Conn.Open() Dim SQL = "Select * From 股票行情表" Adpt = New OleDbDataAdapter( SQL, Conn )
節錄 AppNoUse.aspx Part II Ds = New Dataset() Adpt.Fill(Ds, "股票行情表") MyGrid.DataSource = Ds.Tables( "股票行情表" ).DefaultView MyGrid.DataBind() Conn.Close() End Sub
節錄 AppUse.aspx Part I Sub OpenDataBase_And_BindToDataGrid() If Not Application("股票行情表") Is Nothing Then MyGrid.DataSource = Application("股票行情表").DefaultView MyGrid.DataBind() Exit Sub ' 退出副程式, 不用開啟資料庫 End If Dim Conn As OleDbConnection Dim Adpt As OleDbDataAdapter Dim Ds As DataSet
節錄 AppUse.aspx Part II Dim Provider = "Provider=Microsoft.Jet.OLEDB.4.0" Dim Database = "Data Source=" & Server.MapPath( "Sample.mdb" ) Conn = New OleDbConnection( Provider & ";" & DataBase ) Conn.Open() Dim SQL = "Select * From 股票行情表" Adpt = New OleDbDataAdapter( SQL, Conn )
節錄 AppUse.aspx Part III Ds = New Dataset() Adpt.Fill(Ds, "股票行情表") ' 增加此一敘述 Application("股票行情表") = Ds.Tables( "股票行情表" ) MyGrid.DataSource = Ds.Tables( "股票行情表" ).DefaultView MyGrid.DataBind() Conn.Close() End Sub
11-3 Session 物件
Session 物件 Session 物件跟 Application 物件一樣,可儲存網頁間的共用資料,但可用範圍不及 Application 物件,僅侷限於同一瀏覽視窗的不同網頁,不過其特色是每一個瀏覽視窗各自擁有獨立的 Session 物件,在作業上,瀏覽視窗之間不會互相干擾,這是它的優點。
利用 Session 物件存放資料的語法 利用Session 物件存放資料的語法與 Application 物件完全相同,例如: appData = Application("appData") ' 讀取Application物件的資料 sesData = Session("sesData") ' 讀取Session物件的資料 Application("appData") = appData ' 將資料寫入Application物件 Session("sesData") = sesData ' 將資料寫入Session物件
session.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <Form runat="server"> <asp:Button runat="server" Text="PostBack" OnClick="Button_Click"/> </Form> </BODY> </HTML>
session.aspx Part II <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Session("sesData") = Session("sesData") + 100 Response.Write( "sesData=" & Session("sesData") ) End Sub Sub Button_Click(sender As Object, e As EventArgs) </script>
session.aspx 網頁
session.aspx 網頁測試的技巧 同時開啟兩個瀏覽器並且同時瀏覽session.aspx,結果 sesData 的變化如下:
Session 物件與 Application 物件的比較
Session 物件與資料傳遞的比較
檢視 Input.aspx 的程式部分 Sub Button_Click(sender As Object, e As EventArgs) Dim URL URL = "Show.aspx?Name=" & Server.URLEncode(Name.Text) & _ "&Tel=" & Server.URLEncode(Tel.Text) & _ "&Addr=" & Server.URLEncode(Addr.Text) Server.Transfer( URL ) End Sub 以上程式會讀取 Name、Tel、Addr 三個欄位的資料,編碼後以 Server.Transfer 方法傳給 Show.aspx 網頁。
將 Input.aspx 另存為 swrite.aspx,並將程式修改 Sub Button_Click(sender As Object, e As EventArgs) Session("Name") = Name.Text Session("Tel") = Tel.Text Session("Addr") = Addr.Text Response.Redirect( "sread.aspx" ) ' 使用Server.Transfer亦可 End Sub 以上程式會讀取 Name、Tel、Addr 三個欄位的資料,然後寫到 Session 物件中,最後將網頁轉向 sread.aspx。
檢視 Show.aspx 的程式部分 以上程式利用 Request("資料") 的方法讀取附帶在網址中的資料,然後將其顯示在網頁上。 Sub Page_Load(sender As Object, e As EventArgs) Data.Text = "姓名: " & Request("Name") & "<P>" Data.Text &= "電話: " & Request("Tel") & "<P>" Data.Text &= "地址: " & Request("Addr") End Sub 以上程式利用 Request("資料") 的方法讀取附帶在網址中的資料,然後將其顯示在網頁上。
將 Show.aspx 另存為 sread.aspx,並將程式修改 Sub Page_Load(sender As Object, e As EventArgs) Data.Text = "姓名: " & Session("Name") & "<P>" Data.Text &= "電話: " & Session("Tel") & "<P>" Data.Text &= "地址: " & Session("Addr") End Sub 以上只要將 Request 改成 Session 即可程式會讀取 Session 物件中的 Name、Tel、Addr 資料,然後將其顯示在網頁上。
Session 物件與資料傳遞 兩者的差異 (1) 在共用資料方面 :資料傳遞要透過 Server.Transfer 或 Response. Redirect來 傳遞資料,藉以達到共用資料的目的;而對 Session 物件來說,卻是一方把資料寫到Session物件,而另一方再讀取Session物件中的資料。
Session 物件與資料傳遞 兩者的差異 (2) 在切換網頁方面,資料傳遞的工作模式一定要呼叫 Server.Transfer 或 Response.Redirect 切換網頁藉以傳遞資料;但 Session 物件除了可以用 Server.Transfer 或 Response.Redirect 切換網頁之外,上網者直接在瀏覽器的網址欄輸入網址,或是程式提供連結讓上網者選取,也是切換網頁的方法。
Session 物件與資料傳遞 兩者的差異 (3) 在共用對象方面,資料傳遞僅限於資料傳遞者與資料接收者雙方可以共用資料,Session 物件卻沒有這個限制,只要有某一個網頁將資料寫入 Session 物件中,其他網頁都可以存取該 Session 物件中的資料,如下圖:
使用 Session 物件不可不知的事情 --上網者關閉了 Cookie 功能(1) IE 6.x 版的 Cookie 設定
使用 Session 物件不可不知的事情 --上網者關閉了 Cookie 功能(2) IE 5.x 版的 Cookie 設定
解決方案一 在「歡迎頁」或「登入頁」告訴上網者 “本網頁須使用 Cookie 功能”,請他開啟Cookie ,網頁架構大致如下:
Welcome.aspx 與 Course.aspx
Welcome.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <H3>歡迎使用 ASP.NET 網頁製作教本 -- 第二章<HR></H3> <H3>進入 ASP.NET 網頁製作的準備工作</H3> <BLOCKQUOTE> 2-1 ASP.NET 相關技術概說<BR> 2-2 使用 HTML 的基本觀念<BR> 2-3 常用的 HTML 標示 </BLOCKQUOTE> <A HREF="Course.aspx">進入課程網頁</A>
Welcome.aspx Part II <HR>本網頁必須開啟 Cookie 方可正常運作, <A HREF="UseCook.htm">瞭解如何開啟 Cookie</A>。 </BODY> </HTML> <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Session("WelcomePage") = "Passed" End Sub </script>
Course.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <H3>Course.aspx -- 進入 ASP.NET 網頁製作的準備工作<HR></H3> <H3>2-1 ASP.NET 相關技術概說</H3> <Blockquote>先撇開網際網路的技術問題... </Blockquote> <H3>2-2 使用 HTML 的基本觀念</H3> <Blockquote>上一節筆者說過,在ASP.NET網頁的製作中... <H3>2-3 常用的 HTML 標示</H3> <Blockquote>上一個段落筆者談了許多HTML的基本觀念... <HR> </BODY> </HTML>
Course.aspx Part II <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) If Session("WelcomePage") <> "Passed" Then ' Cookie未開啟 Response.Redirect( "Welcome.aspx" ) Else ' Cookie為開啟的 End If End Sub </script>
解決方案二(1) 先決定哪一個目錄的網頁其 Session 物件可在 Cookie 未開啟的情況下依然能正常工作,然後在該目錄中置入以下的 web.config 檔案: <configuration> <system.web> <sessionState mode="InProc" cookieless="true" /> </system.web> </configuration>
解決方案二 (2) 接著進行以下的設定: 開啟 Internet Information Services:過程是開啟「控制台 -> 系統管理工具 -> Internet Information Services」 。
解決方案二 (3) 依序展開「本機電腦->網站->預設的網站->kjaspx->ch11」,如下圖:
解決方案二 (4) 出現「Cookieless 內容」視窗,如下圖:
解決方案二 (5) 完成以上設定之後,請關閉瀏覽器的Cookie,然後瀏覽Cookieless目錄 session.aspx 網頁,此一網頁複製自 ch11目錄的 session.aspx(參見本節一開始的介紹),但 Cookieless 目錄 session.aspx 網頁可以正常工作,而ch11目錄的 session.aspx 卻不然。
Cookieless 的玄機 (1)
Cookieless 的玄機 (2) 當我們瀏覽 Cookieless 目錄的 session.aspx 網頁時,所輸入的網址是: 但顯示在瀏覽器的網址欄卻多了一串莫 名其妙的文字, ASP.NET 就是利用這一 串額外多出來的文字來辨識不同的連線 者,藉以將其資訊記錄在 Session 物件 中。 http://localhost/kjaspx/ch11/Cookieless/session.aspx
斷了線的 Session 物件 (1) 不想讓 Session 物件的資料被釋放,應變的方案可能有: 延長IIS斷線的時間:設定Session 的 TimeOut 屬性,敘述如下: Session.TimeOut = N ' 單位:分鐘
斷了線的 Session 物件 (2) 2. 使用「資料傳遞」工作模式:如果相關的網頁不多,可以考慮藉助資料傳遞的工作模式來共用資料。 3.使用 Cookie 物件:Cookie 物件可以讓我們把連線者的資訊記錄在瀏覽器,資料的存放將可以不受連線時間的影響。
筆者的建議 先評估 Session 物件被釋放會對網頁造成何種程度的影響,若沒什麼影響,可以不理會 Session 物件被釋放的問題。
11-4 Cookie 物件
Cookie 物件(1) Cookie 物件跟 Application 及 Session 物件一樣都可以存放共用資料,但 Application 及 Session 物件會把共用資料存放在 Server 的記憶體中,而 Cookie 物件則會藉助瀏覽器所提供的 Cookie 功能將資料存放在 Client(客戶端)的檔案或記憶體中。
Cookie 物件(2) 在共用對象方面,Cookie 物件與 Session物件比較像,在預設的情況下,每個連線者擁有各自的 Cookie 物件,如下圖:
利用 Cookie 物件存放資料的語法 Cookie 是附屬於 Response 及 Request 物 件的子物件,使用時須在前面加上 「Response.」及「Request.」,例如: 寫入 Cookie 要使用 Response.Cookies,而讀取 Cookie 則 是使用 Request.Cookies(注意 Cookies 有 s),此外,還要加上 .Value 。 Response.Cookies("data1").Value = 100 ' 寫入資料到Cookie data1 = Request.Cookies("data1").Value ' 讀取Cookie的資料
Request.Cookies 沒有資料時 要避免錯誤,敘述 #04 要修改成: #01 Dim data1, data2 #02 Response.Cookies("data1").Value = 100 #03 data1 = Request.Cookies("data1").Value #04 data2 = Request.Cookies("data2").Value 要避免錯誤,敘述 #04 要修改成: #04 Dim cookie As HttpCookie #05 cookie = Request.Cookies("data2") #06 If Not cookie Is Nothing Then ' 表示 Cookie 含有資料 #07 data2 = Request.Cookies("data2").Value #08 Else #09 data2 = "" ' 或設定成 0 …,表示沒有資料 #10 End If
錯誤寫法一 Cookies 不是獨立的物件,而是附屬於 Request 物件及 Response 物件,正確的寫法應該是: (×) Cookies("data1").Value = data1 (×) data1 = Cookies("data1").Value Cookies 不是獨立的物件,而是附屬於 Request 物件及 Response 物件,正確的寫法應該是: (○) Response.Cookies("data1").Value = data1 (○) data1 = Request.Cookies("data1").Value
錯誤寫法二 Cookies 忘了加上 s,正確的寫法應該是: (×) Response.Cookie("data1").Value = data1 (×) data1 = Request.Cookie("data1").Value Cookies 忘了加上 s,正確的寫法應該是: (○) Response.Cookies("data1").Value = data1 (○) data1 = Request.Cookies("data1").Value
錯誤寫法三 Request 物件的用途是讀取瀏覽器的資料、而 Response 物件的用途則是下傳(寫入)資料到瀏覽器,如下圖: (×) Request.Cookies("data1").Value = data1 (×) data1 = Response.Cookies("data1").Value Request 物件的用途是讀取瀏覽器的資料、而 Response 物件的用途則是下傳(寫入)資料到瀏覽器,如下圖:
Cookie物件的應用(一)
Welcome2.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <H3>歡迎使用 ASP.NET 網頁製作教本 -- 第二章<HR></H3> <H3>進入 ASP.NET 網頁製作的準備工作</H3> <BLOCKQUOTE> 2-1 ASP.NET 相關技術概說<BR> 2-2 使用 HTML 的基本觀念<BR> 2-3 常用的 HTML 標示 </BLOCKQUOTE> <A HREF="Course2.aspx">進入課程網頁</A> <HR>本網頁必須開啟 Cookie 方可正常運作, <A HREF="UseCook.htm">瞭解如何開啟 Cookie</A>。 </BODY> </HTML>
Welcome2.aspx Part II <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Response.Cookies("WelcomePage").Value = "Passed" End Sub </script>
Course2.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <H3>Course2.aspx -- 進入 ASP.NET 網頁製作的準備工作<HR></H3> <H3>2-1 ASP.NET 相關技術概說</H3> <Blockquote>先撇開網際網路的技術問題... </Blockquote> <H3>2-2 使用 HTML 的基本觀念</H3> <Blockquote>上一節筆者說過,在ASP.NET網頁的製作中... <H3>2-3 常用的 HTML 標示</H3> <Blockquote>上一個段落筆者談了許多HTML的基本觀念... <HR> </BODY> </HTML>
Course2.aspx Part II <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim cookie As HttpCookie cookie = Request.Cookies("WelcomePage") If cookie Is Nothing Then ' "WelcomePage" Cookie 不存在 Response.Redirect( "Welcome2.aspx" ) End If If Request.Cookies("WelcomePage").Value <> "Passed" Then End Sub </script>
Cookie 物件與 Session 物件的優劣比較
Cookie 的生命週期
設定 Cookie 的生命週期 Cookie 將滅於瀏覽器結束執行時,其實這只對了一半,因為只要經過設定,Cookie 就可以在瀏覽器結束執行之後,依然儲存在檔案中,而當瀏覽器下次啟動時,會自動將其載回瀏覽器。
設定 Cookie 的有效期限(1) 想要在瀏覽器結束執行時,將儲存於Cookie 中的資料保存下來,可在執行「Response.Cookies(“資料”).Value = 資料」之後,設定其Expires屬性,例如: Response.Cookies("UserID").Value = "kjwang" Response.Cookies("UserID").Expires = "9/28/2005"
設定 Cookie 的有效期限(2) 如果我們設定了 Cookie 的使用期限(例如以上的 “UserID”),則該 Cookie 將成為瀏覽器之間共用的 Cookie,也就是說,每一個開啟的瀏覽器都可以存取到此一 Cookie;但對於沒有設定使用期限的 Cookie 而言,則只屬於當時執行之瀏覽器,如下圖:
設定 Cookie 的有效期限(3)
設定 Cookie 的有效天數 設定的是「從本日算起若干日以內」有效,此時可採用以下方法:(假設10日有效) Dim ExpireDate As Date Response.Cookies("UserID").Value = "kjwang" ExpireDate = DateAdd(DateInterval.Day, 10, Now) ' 10日內有效 Response.Cookies("UserID").Expires = Format(ExpireDate, "M/dd/yyyy")
Cookie 物件的應用(二) 之一 瀏覽 Login.aspx 網頁
Cookie 物件的應用(二) 之二 請先關閉瀏覽器,然後重新開啟瀏覽器,最後再瀏覽 Login.aspx 網頁,結果我們可以看到「帳號」欄位依然保留著我們先前所輸入的資料,而即使過一些時日再瀏覽此一網頁,結果也是相同的。
Login.aspx Part I <HTML> <BODY BgColor="#FFFFFF"> <H3>Login.aspx -- 請登入帳號及密碼<HR></H3> <Form runat="server"> 帳號:<asp:TextBox runat="server" id="Account" /><p> 密碼:<asp:TextBox runat="server" id="Password" Textmode="Password" /><p> <asp:Button runat="server" Text="登入" OnClick="Button_Click"/> <HR><asp:Label runat="server" id="Msg" /> </Form> </BODY> </HTML>
Login.aspx Part II <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim cookie As HttpCookie cookie = Request.Cookies("Account") If Not cookie Is Nothing Then Account.Text = Request.Cookies("Account").Value End If End Sub Sub Button_Click(sender As Object, e As EventArgs) Response.Cookies("Account").Value = Account.Text Response.Cookies("Account").Expires = "12/31/2999" Msg.Text = "登入成功!" </script>
11-5 檔案(File)
檔案(File) 檔案在共用資料中所扮演的角色跟 Application 物件類似,可供不同連線者(不同機器)的所有網頁共用,不過其生命週期比 Application 物件長,Application 物件會在IIS結束執行或關機時結束其生命週期,而檔案則不受此一限制。
StreamReader 物件與檔案的讀取 StreamReader 是讀取檔案專用的物件,附 屬於 System.IO 命名空間,使用前要先利用 以下標示匯入 System.IO 命名空間: 利用 New StreamReader() 建立 StreamReader 物件,如下: <%@ Import Namespace="System.IO" %> Dim PathName As String = Server.MapPath("sample.txt") Dim sReader As StreamReader ' 宣告一StreamReader物件 sReader = New StreamReader( PathName, Encoding.Default )
讀取檔案的方法 如果 New StreamReader() 成功地建立了StreamReader 物件,即表示成功地開啟了檔案,並且將檔案的內容安排成串流(stream)形式,讀取資料的常用方法有:
串流與資料的讀取(1) 假設 sReader 為開啟 sample.txt 檔案所 得到的串流,而 sample.txt 的內容如 下: 那麼串流表示成 (註:其中的 為跳行字元)。 作者=王國榮 出版社=旗標 書名=ASP.NET 網頁製作教本
串流與資料的讀取(2) 如果使用 ReadLine 讀取其中的資料,則每一次都會讀到 的位置,假設讀取三次,那麼三次的內容分別如下: Dim S As String S = sReader.ReadLine() ' S 等於 "作者=王國榮" S = sReader.ReadLine() ' S 等於 "出版社=旗標" S = sReader.ReadLine() ' S 等於 "書名=ASP.NET 網頁製作教本"
串流與資料的讀取(3) 請注意利用 ReadLine 所讀取的內容中並未包含 ,但如果我們使用 ReadToEnd 方法讀取,則所讀取的內容將包含 ,例如: Dim S As String S = sReader.ToEnd() ' S等於
P.540 實例一 利用 ReadToEnd 方法讀取 sample.txt 檔案的內容,並且將其顯示在瀏覽器上面。
fread01.aspx <%@ Import Namespace="System.IO" %> <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim PathName As String = Server.MapPath("sample.txt") Dim sReader As StreamReader sReader = New StreamReader( PathName, Encoding.Default ) Dim S As String S = sReader.ReadToEnd() sReader.Close() ' 關閉檔案 Response.Write( "<pre>" & S & "</pre>" ) End Sub </script>
P.541 實例二 利用 ReadLine 方法讀取 sample.txt 檔案 的內容,並且將其顯示在瀏覽器上面。 Dim S As String S = sReader.ReadLine() ' 讀取第一行 While Not S Is Nothing ' 判斷是否有讀取到資料 ' ... S = sReader.ReadLine() ' 繼續讀取下一行 End While sReader.Close() ' 關閉檔案
fread02.aspx <%@ Import Namespace="System.IO" %> <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim PathName As String = Server.MapPath("sample.txt") Dim sReader As StreamReader sReader = New StreamReader( PathName, Encoding.Default ) Dim S As String S = sReader.ReadLine() ' 讀取第一行 While Not S Is Nothing ' 判斷是否有讀取到資料 Response.Write( S & "<br>" ) S = sReader.ReadLine() ' 繼續讀取下一行 End While sReader.Close() ' 關閉檔案 End Sub </script>
P. 542 練習 (1) 寫一網頁 EditTxt.aspx 讓使用者編輯sample.txt 檔案的內容,而按下「傳送」鈕時,將其內容顯示在 EditDsp.aspx 網頁中,如下圖:
P. 542 練習 (2)
StreamWriter 物件與檔案的寫入 StreamWriter 是寫入檔案專用的物件,也 附屬於 System.IO 命名空間,使用前要先 利用以下標示匯入 System.IO 命名空間: 接著是利用New StreamWriter() 建立 StreamWriter 物件,例如: <%@ Import Namespace="System.IO" %> Dim PathName As String = Server.MapPath("sample2.txt") Dim sWriter As StreamWriter ' 宣告一StreamWriter物件 sWriter = New StreamWriter( PathName, False, Encoding.Default )
寫入檔案的方法 寫入資料到檔案常用的方法有 Write 、 WriteLine 及 Flush:
P.544 實例 利用 ReadToEnd 及 Write 方法將sample.txt 檔案的所有內容複製到 sample2.txt。
CopyFile.aspx Part I <%@ Import Namespace="System.IO" %> <script Language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim PathName As String = Server.MapPath("sample.txt") Dim sReader As StreamReader sReader = New StreamReader( PathName, Encoding.Default ) Dim PathName2 As String = Server.MapPath("sample2.txt") Dim sWriter As StreamWriter sWriter = New StreamWriter( PathName2, False, Encoding.Default)
CopyFile.aspx Part II Dim S As String S = sReader.ReadToEnd() sWriter.Write( S ) sWriter.Flush() sReader.Close() sWriter.Close() Response.Write( "將 sample.txt 複製到 sample2.txt, OK!" ) End Sub </script>
P. 545 練習 承 p.542 練習,我們希望在第一個網頁按下「傳送」鈕之後,先將其寫回 sample.txt 檔案中,然後才傳送到第二個網頁將編輯後的內容顯示出來。