20-3 彖d狺@G茬X

本節將使用兩個小範例來說明如何使用 JavaScript 進行檔案讀取與目錄讀取的應用。

首先我們先看看計數器的範例。我們在前面幾個小節也曾經介紹過計數網頁的範例,那些範例是利用 Application 和 Session 變數來達到計數的功能,由於這些變數都儲存在記憶體中,因此這些計數資料會因伺服器的重開機而流失。而本小節中的計數網頁,是將計數資料儲存在一個計數檔案之中,比較穩定,請見此範例:

Example(fileAccess/pageHitCounter01.asp):

在上述範例中,只要使用者按下瀏覽器的「重新整理」,計數器就會加 1。此範例的原始碼如下:

原始檔(fileAccess/pageHitCounter01.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="以檔案為主的計數器" %>
<!--#include file="../head.inc"-->
<hr>

<%  
fso = new ActiveXObject("Scripting.FileSystemObject");
countFile = Server.MapPath("pageHitCounter01.cnt");	// 找出計數檔案在硬碟中的實際位置
fid = fso.OpenTextFile(countFile, 1);			// 開啟唯讀檔案
count = fid.ReadLine();					// 從檔案讀出計數資料
fid.Close();						// 關閉檔案
count++;						// 增加計數資料
fid = fso.OpenTextFile(countFile, 2);			// 開啟檔案並允許寫入
fid.WriteLine(count);					// 寫入檔案
fid.Close();						// 關閉檔案
%>

<center>
您是本頁的第 <font color=green><%=count%></font> 位訪客.!
<p>(按「<a href="javascript:history.go(0)">重新整理</a>」以增加計數資料。)
</center>

<hr>
<!--#include file="../foot.inc"-->

由上述程式碼可看出,我們必須先產生一個 FileObject 的物件,再經由此物件的 OpenTextFile 方法來開啟計數檔案並回傳檔案指標 Out,然後再經由 Out 的 ReadLine 和 WriteLine 方法來對檔案進行讀取和寫入。但在使用此計數網頁之前,我們必須先準備一個計數檔案(在此例是 pageHitCounter.cnt),以便儲存計數資料。由於計數資料室儲存在檔案之中,因此並不會因為伺服器的重開機而造成計數資料的流失。

我們也可以將計數功能寫成一個函數,並讓程式碼自動去尋找計數檔案,這時候只要網頁導入包含此函數的檔案,就可以具備計數功能。例如:

Example(fileAccess/pageHitCounter02.asp):

在上述範例中,只要使用者按下瀏覽器的「重新整理」,計數器就會加 1。此範例的原始碼如下:

原始檔(fileAccess/pageHitCounter02.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% title="以檔案為主的計數器" %>
<!--#include file="../head.inc"-->
<hr>

<center>
<!--#include file="counter.inc"-->
您是本頁的第 <font color=green><%=pageHitCounter()%></font> 位訪客.!
<%counterFile=Request.ServerVariables("URL") + ".cnt";%>
<p>(本頁的計數資料儲存在 <a href="<%=counterFile%>"><%=counterFile%></a>。)
<p>(按「<a href="javascript:history.go(0)">重新整理</a>」以增加計數資料。)
</center>

<hr>
<!--#include file="../foot.inc"-->

紀錄計數資料的檔案則是在

原始檔(fileAccess/pageHitCounter02.asp.cnt):(灰色區域按兩下即可拷貝)
16944

而 counter.inc 的原始碼如下:

原始檔(fileAccess/counter.inc):(灰色區域按兩下即可拷貝)
<script runat=server language=jscript>
function pageHitCounter(){
	fso = new ActiveXObject("Scripting.FileSystemObject");
	counterFile = Request.ServerVariables("PATH_TRANSLATED") + ".cnt";	// 找出記數檔案在硬碟中的實際位置
	fid = fso.OpenTextFile(counterFile, 1);			// 開啟唯讀檔案
	count = fid.ReadLine();					// 從檔案讀出記數資料
	fid.Close();						// 關閉檔案
	count++;						// 增加記數資料
	fid = fso.OpenTextFile(counterFile, 2);			// 開啟檔案並允許寫入
	fid.WriteLine(count);					// 寫入檔案
	fid.Close();						// 關閉檔案
	return(count);
}
</script>

<script runat=server language=vbscript>
Function pageHitCounter
	Set fso = Server.CreateObject("Scripting.FileSystemObject")
	counterFile=Request.ServerVariables("PATH_TRANSLATED") & ".cnt"	' 找出記數檔案在硬碟中的實際位置
	'Response.Write(counterFile)
	Set Out= fso.OpenTextFile(counterFile, 1, FALSE, FALSE)	' 開啟唯讀檔案
	count = Out.ReadLine					' 從檔案讀出記數資料
	Out.Close						' 關閉檔案
	count= count+1						' 增加記數資料
	Set Out= fso.CreateTextFile (counterFile, TRUE, FALSE)	' 開啟檔案並允許寫入
	Out.WriteLine(count)					' 寫入檔案
	Out.Close						' 關閉檔案
	pageHitCounter=count					' 回傳資料
End Function
</script>

在上述範例中,計數檔案的名稱都是原網頁檔案名稱再加上 ".cnt",因此只要在原網頁導入 count.inc,此網頁就具有個別計數功能。此外,此檔案包含兩個函數,可以分別用在 JScript 和 VBScript。


JScript 程式設計與應用:用於伺服器端的 ASP 環境