天天看點

ASP 如何讀寫一個文本檔案

利用Active Server Pages腳本,你就幾乎完全可以控制伺服器的檔案系統。需要如下的元件:

■FileSystemObject:這個對象包括了一些基本的對檔案系統進行操作的方法,比如說,複制和删除檔案夾或者檔案

■TextStream:這個對象用來讀寫檔案

■File:它的方法和屬性被用來處理單獨的檔案。

■Folder:它的方法和屬性被用來處理檔案夾。

這部分介紹如何讀寫一個文本檔案。這對文本檔案有很多用處,包括下面這些。

■一個常用的日志,利用文本檔案記錄通路者的活動以供日後參考。你可以記錄諸如通路者IP位址,浏覽器類型等等你能得到而且想要了解的東西。

■Form中的資料,你可以将使用者在Form的文本框中填寫的東西記入文本檔案,盡管使用資料庫會更加有效。

■每日新聞,将每日的新消息記錄到文本檔案,然後可以在很多檔案中讀出來顯示

 

對文本檔案的寫操作

要建立并且寫入一個文本檔案,你應當使用FileSystemObject和TextStream對象。首先,你需要建立一個FileSystemObject對象的事例,然後,再利用CreateTextFile()以該事例建立一個TextStream對象的事例,最後利用TextStream對象的WriteLine()方法來寫入檔案。下面是這個例子: 

<%

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyTextFile=MyFileObject.CreateTextFile(“c://mydir//test.txt”)

MyTextFile.WriteLine(“歡迎進入邁至科網絡ASP教程檔案操作示例!”

MytextFile.Close

%>

這個例子建立了一個名字為test.txt的檔案,該檔案位于c://mydir//,WriteLine()方法被用來将那一句話寫入該檔案。最後,這個TextStream對象的事例關閉并且釋放所有資源,下面部分将對每一個步驟進行仔細解釋。

 

注意

如果你需要虛拟路徑轉化為真實路徑(這樣操作使得站點具有更強的可移植性),可以用Server.MapPath()方法,例如下面這個例子:

PhysicalPath=Server.MapPath(“/private/test.txt”)

假設虛拟路徑/private對應于真實路徑c://net//private,那麼這個PhysicalPath的值将是c://net//private//test.txt

 

CreateTextFile()方法用來建立一個新的文本檔案,當這個方法被調用,那麼就傳回一個TextStream對象,這個方法有一個必須的參數和兩個可選的參數。

■FileSpecifier,限定要建立的檔案及路徑,如果沒有這個參數,顯然是要報錯的。

■Overwrite,這個參數是可選的,預設為TRUE,如果存在同名的檔案,依據這個參數判斷是否進行覆寫操作,如果賦為FALSE,那麼存在同名檔案時會傳回錯誤資訊。

■Unicode,這個參數可選,預設為False,訓示該檔案是否用ASC碼形式進行建立和儲存。如果選擇TRUE,将以Unicode方式建立。

再利用CreateTextFile()方法建立了文本檔案後,你就可以使用TextStream對象來對檔案進行讀寫,在寫操作時,有如下的方法:

■Write(String).這個方法将一個字段寫入文本檔案。

■WriteLine(String),這個方法是在檔案中添加字串和一個分行符,這裡面的string參數可選,如果沒有的話,則添加一個分行符。

■WriteBlankLines(lines),顧名思義,這是允許使用者在檔案中指定數目個分行符。

■close.這個方法就是關閉一個打開的TextStream檔案并釋放其占用的資源。

 

下面是一個連續在檔案中輸出32行同樣字元串的例子腳本:

 

<% 

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyTextFile=MyFileObject.CreateTextFile(“c://mydir//test.txt”)

For i=1 to 32

MyTextFile.WriteLine(“Hello World!”)

Next

MyTextFile.Close

%>

 

在文本檔案中讀取和追加資料

這裡,首先要做的依然是建立一個FileSystemObject對象的事例,然後,利用OpenTextFile()方法來建立一個TextStream對象的事例,最後,你就可以用TextStream對象的ReadLine方法來對檔案讀取,下面是個例子: 

<%

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyTextFile=MyFileObject.OpenTextFile(“c://mydir//test.txt”)

While not MyTextFile.AtEndOfStream

Response.Write(MyTextFile.ReadLine)

Wend

MyTextFile.Close

%>

 

這個腳本将文本檔案Test.txt檔案中所有的内容讀出來并且顯示在浏覽器上。如果檔案不存在,回顯示相應錯誤資訊(在下一個部分,你會學到怎樣檢測一個檔案是否存在)

其中While…Wend循環是将檔案内容一行一行的循環讀取,其中如果沒有到達檔案末尾,那麼AtEndOfStream屬性就會是False,直到末尾時變為True。

 

下面是讀取檔案時可能會用到的屬性:

■AtEndOfLine。這個屬性判斷是否到了檔案中一個特定行的末尾,如果不是,則為False,反之為True

■AtEndOfStream。就是這個例子中用到的,判斷是否到了該檔案的結尾并依此傳回True和False

■Column。這個屬性判斷目前字元在該行的位置,傳回一個整數值。

■Line。這個屬性判斷目前行在檔案中的行數,傳回一個整數值

 

除了使用ReadLine方法以外,你當然還可以使用Read()方法。Read()方法會從指定打開的文本檔案中傳回指定數目個字元。下面是用這個方法的示例:

 

<%

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyTextFile=MyFileObject.OpenTextFile(“c://mydir//test.txt”)

While NOT MyTextFile.AtEndOfLine

Response.Write(MyTextFile.Read(1))

WEND

MyTextFile.Close

%>

這個腳本從文本檔案中接受第一行,每次接受顯示一個字元,利用AtEndOfLine屬性一直到行尾截止,由Read(1)一個一個讀取。

 

下面是從文本檔案讀取資料時要用到的方法

■Read(Number).從文本檔案中讀取限定數目個字元

■ReadLine.從文本檔案中讀取一行(換行符不傳回)

■ReadAll.這個方法接受TextStream檔案的所有内容

■Skip(Number).這個方法從一個打開的文本檔案中跳過指定數目個字元

■close關閉目前打開的檔案并釋放所占用的資源。

 

一般說來,OpenTextFile()方法是用來讀取資料的,但是你也可以用它追加資料資訊,例如,你希望在該文本資料中追加一些新内容,可以見下面的示例:

 

<%

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyTextFile=MyFileObject.OpenTextFile(“c://mydir//browser.log”,8,TRUE)

MyTextFile.WriteLine(Request.ServerVariables(“HTTP_USER_AGENT”))

MyTextFile.Close

%>

這個腳本用于在網站中建立一個日志檔案。無論什麼時候這個腳本執行,此時的浏覽器類型就會追加到該日志檔案中,浏覽器資訊由ServerVariables集合接收。

 

注意

有關ServerVariables集合的情況參見本書的第14章有關小節。

這裡面需要說明的是,如果browser.log不存在,則會自動建立,這是使用了OpenTextFile()方法的兩個參數:IOMode和Create參數。

 

下面介紹針對于OpenTextFile()方法的所有參數:

■FileSpecifier,限定要進行讀寫或者追加的文本檔案名稱

■IOMODE,可選參數,訓示該檔案是被用來讀,寫還是追加。預設為1表示讀,設為2表示進行寫操作,進行追加操作則設為8。

■Create,可選參數,如果檔案不存在是否建立,預設為False,如果希望進行建立,則設為TRUE

■Format,可選參數,訓示檔案是ASCII碼制格式還是Unicode格式,作為預設的ASCII碼制檔案,其值為-2,如果希望設為Unicode格式,此參數設為-1

你不能在目前版本的Active Server Pages中使用常量,例如,你如果希望進行檔案 追加,你必須使用數字8作為參數而不是什麼常量。

 

範例應用

這部分提供了一個範例應用來使得讀者對這些對象、方法、屬性、以及集合、有更加明晰的認識了解。在世界最大的網上書店,美國亞馬遜網上書店(www.amazon.com)正在進行(也許您在閱讀時這個活動還在進行)網上的故事合創運動,由John Updike先生寫入 該故事的第一部分,每一天,通路者都可以根據自己的意願線上進行故事發展的寫作,同時每一天都會對寫的最好的給出$1000的獎賞(如果您的英語寫作足夠好,不妨一試)。這個故事是大家一起添加的。

這真是個好主意,這下子網站的‘回頭客’就會激增,同時産生巨大的社會影響力,你完全可以在自己的網站上實作類似的應用。最簡單的方法就是直接把這個範例拿出去放到你的網站上,當然,如果你的網站還不能支援Active Server Pages,那麼隻好說你太不幸運了(見圖19.1)。

 

例子19.1 Story.asp腳本

 

<%

IF NOT Request.Form(“NextLine”)=”” THEN

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyTextFile=MyFileObject.CreateTextFile(“C://MyDir//TheStory.txt”,8,TRUE)

MyTextFile.WriteLine(Request.Form(“NextLine”))

MyTextFile.Close

END IF

%>

<HTML>

<HEAD><TITLE>線上故事接龍</TITLE></HEAD>

<BODY>

<hr>

<%

Set MyFileObject=Server.CreateObject(“Scripting.FileSystemObject”)

Set MyText=MyFileObject.OpenTextFile(“C://MyDir//TheStory.txt”)

WHILE NOT MyTextFile.AtEndOfStream

Response.Write(“&nsp;&nsp;”&MyTextFile.Readline)

WEND

MyTextFile.Close

%>

<HR>

<H3>請輸入這個故事的新行:</h3>

<Form method=”post” action=”Story.asp”>

<input name=”NextLine” Type=Text Size=70>

<input type=Submit Value=”确認添加這一句”>

</Form>

</Body>

</HTML>

這個Active Server Pages檔案包含兩段主要腳本,第一部分是看是否有Form傳來的 句子資訊,如果有,則該句子添加到TheStory.txt檔案中去。第二部分是顯示TheStory.txt檔案中的内容,請注意其中每一行之間用兩個&nbsp;來進行分隔,參見HTML中符号含義。然後用一個Form提供通路者進行添加,其中Form執行還是這個檔案,(就是第一部分腳本處理),是以注意該檔案名稱必須是”story.asp”

 

其實這個應用實在是過于簡單,但是作一個留言版相當合适,而且在該檔案膨脹過大時,隻要删除就可以了,(不要忘了前面的腳本中将OpenTextFile的Create參數設為TRUE)是可以建立文本檔案的。